2010-11-18 10 views
13

Poniższy kod wydaje mi się uzasadniony. Powinien utworzyć obiekt, a następnie użyć funkcji dynamicznych, aby umożliwić przypisanie dowolnych właściwości. Jednak kompilator mówi, że "ExpandoObject nie zawiera definicji testu". Do czego mówię: "Wiem, to jest szalony punkt!"C# inicjalizator obiektów dynamicznych nie skompiluje się

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

Wszelkie pomysły, dlaczego csc nie pozwala na to.

Alternatywą jest ręczne rozwinięcie kodu do poszczególnych przydziałów właściwości.

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

Co jest denerwujące, gdy mam wiele właściwości do przypisania.

+2

Głosuj na tę funkcję w Visual Studio [UserVoice] (https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/7062098-support-object-initializers-on-expandoobjects). – orad

Odpowiedz

13

W inicjalizatorze obiektu typ to ExpandoObject, a nie dynamic, więc nie można uzyskać dynamicznej funkcjonalności. Po inicjalizatorze działa się na zmiennej typu dynamic, dzięki czemu dostępna jest tam dynamiczna funkcjonalność .

+0

Ach, tak, to ma sens. Obiekt initializer _expression_ nie jest wpisywany jako dynamiczny. –

6

W pierwszym przykładzie kompilator C# będzie szukał właściwości o nazwie Test na obiekcie ExpandoObject. Nie istnieje.

W drugim przykładzie kompilator będzie szukać właściwości Test obiektu dynamicznego. To jest dozwolone, więc kompiluje.

Powiązane problemy