C # динамический объект инициализатор не будет компилироваться - PullRequest
13 голосов
/ 18 ноября 2010

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

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

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

Альтернатива состоит в том, чтобы вручную расширить код на отдельные присвоения свойств.

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

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

Ответы [ 2 ]

13 голосов
/ 18 ноября 2010

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

7 голосов
/ 18 ноября 2010

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

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

...