Подтвердить что ты не робот

Инициализатор динамических объектов С# не будет компилироваться

Следующий код кажется мне разумным. Он должен создать объект, а затем использовать динамические функции, чтобы я мог назначать любые свойства, которые мне нравятся. Однако компилятор говорит, что "ExpandoObject не содержит определения для теста". На что я говорю: "Я знаю, что эта болтовня!"

dynamic example = new ExpandoObject
{
  Test = "fail"
};

Любые идеи, почему csc не позволяет это.

Альтернативой является ручное расширение кода в отдельные назначения свойств.

dynamic example = new ExpandoObject();
example.Test = "fail";

Что раздражает, когда у меня есть много свойств для назначения.

4b9b3361

Ответ 1

Внутри инициализатора объекта тип ExpandoObject, а не dynamic, поэтому вы не получите динамическую функциональность. После инициализатора вы работаете с переменной типа dynamic, и там доступна динамическая функциональность.

Ответ 2

В вашем первом примере компилятор С# будет искать свойство Test в ExpandoObject. Он не существует.

В вашем втором примере компилятор будет искать свойство Test для динамического объекта. Это разрешено, поэтому оно компилируется.