В C# можно создать объект анонимного типа используя записав свйства в фигурных скобках (как в языке–который–нельзя–называть) >var o = new {name = "Ndndn", place = 12}; Но как потом обратиться к этим свойствам? Судя по подсказке IDE у объекта свойств таких нет. Оказывается всё просто (проще чем в языке–который–нельзя–называть): >item.GetType().GetProperty("label").GetValue(item, null)
2018-01-04 21:42:22

Участники:
@justonemore - 6, @OCTAGRAM - 4, @rkit - 3, @vt - 2

@rkit
Ты чет усложняешь. o.name замечательно работает.
#2893971/1 2018-01-04 21:50:13
@justonemore
Ну да, но если создать список новосозданных объектов и потом попробовать обратиться к свойству элемента этого списка, то не работает. >var i = someList.Add(o); >i.label;
#2893971/2 → /1 2018-01-04 22:05:07
@rkit
Потому что List.Add возвращает void, может быть?
#2893971/3 → /2 2018-01-04 22:06:26
@justonemore
Ошибка. Я о том что если потом нужно будет работать с этими объектами из другого места программы, то код объектАнонимногоТипа.Свойство не пройдёт.
#2893971/4 → /3 2018-01-04 22:22:37
@rkit
А это уже выход за пределы применимости анонимных типов в C#. Тут уже надо не лениться и написать нормальный тип.
#2893971/5 → /4 2018-01-04 22:27:24
@vt
> 2018 > c#
#2893971/6 2018-01-05 05:50:22
@OCTAGRAM
А типы при этом как определяются?
#2893971/7 2018-01-05 06:23:13
@justonemore
А что надо?
#2893971/8 → /6 2018-01-05 09:40:39
@justonemore
В книге написано что «Anonymous types are data types that are declared by the compiler, rather than through the explicit class definitions. As with anonymous functions, when the compiler sees an anonymous type, it does the work to make that class for you and then lets you use it as though you had declared it explicitly».
#2893971/9 → /7 2018-01-05 10:07:17
@vt
Ну если надо не писать программы, а поддерживать древнее Энтерпрайз говно, тогда конечно с#
#2893971/10 → /8 2018-01-05 10:28:08
@OCTAGRAM
Ну вот число на 4 миллиарда умножить, что получится? Или побитово если сдвинуть.
#2893971/11 → /9 2018-01-05 11:20:57
@justonemore
Не понял.
#2893971/12 → /11 2018-01-05 11:22:15
@OCTAGRAM
4 миллиарда влезают в беззнаковое 32хразрядное целое. Ну для чистоты эксперимента можно умножить на 2 миллиарда, чтоб компилятор мог подумать, что это знаковое 32хразрядное целое. А 12 умножить на два миллиарда уже точно не влезет. И какой тип будет? Минимальный 8разрядный, в который только влезает число 12, и компилятор не даст умножить на два миллиарда? 64разрядный, чтоб на всякий случай влезло всё, что ещё быстро обработается процессором? Или обычный 32разрядный? А тогда что будет, если произведение не влезает? Исключение? Тихое переполнение?
#2893971/13 → /12 2018-01-05 12:28:03
@justonemore
Если написать >var r = 2 * 4000000000; то будет ошибка >The operation overflows at compile time in checked mode IDE подсказывает что r относится к типу System.UInt32. Если использовать ключевое слово unchecked (The checked keyword is used to explicitly enable overflow checking for integral-type arithmetic operations and conversions.), то код скомпилируется и результатом умножения будет 3705032704. >unchecked >{ > var r = 2 * 4000000000; > MessageBox.Show(r.ToString()); >} Если написать >System.UInt64 r = 2 * 4000000000; то всё равно 3705032704. Нужно печатать >var r = 2 * 4000000000L;
#2893971/14 → /13 2018-01-05 12:57:35
@OCTAGRAM
Ах, точно, там же типы указываются эльками на конце
#2893971/15 → /14 2018-01-05 14:20:29