Ответ 1
Внутри инициализатора объекта тип ExpandoObject
, а не dynamic
, поэтому вы не получите динамическую функциональность. После инициализатора вы работаете с переменной типа dynamic
, и там доступна динамическая функциональность.
Следующий код кажется мне разумным. Он должен создать объект, а затем использовать динамические функции, чтобы я мог назначать любые свойства, которые мне нравятся. Однако компилятор говорит, что "ExpandoObject не содержит определения для теста". На что я говорю: "Я знаю, что эта болтовня!"
dynamic example = new ExpandoObject
{
Test = "fail"
};
Любые идеи, почему csc не позволяет это.
Альтернативой является ручное расширение кода в отдельные назначения свойств.
dynamic example = new ExpandoObject();
example.Test = "fail";
Что раздражает, когда у меня есть много свойств для назначения.
Внутри инициализатора объекта тип ExpandoObject
, а не dynamic
, поэтому вы не получите динамическую функциональность. После инициализатора вы работаете с переменной типа dynamic
, и там доступна динамическая функциональность.
В вашем первом примере компилятор С# будет искать свойство Test в ExpandoObject. Он не существует.
В вашем втором примере компилятор будет искать свойство Test для динамического объекта. Это разрешено, поэтому оно компилируется.