2010-11-18 13 views
13

Der folgende Code scheint mir vernünftig. Es sollte das Objekt erstellen und dann die dynamischen Features verwenden, um mir irgendwelche Eigenschaften zuzuweisen, die ich mag. Der Compiler sagt jedoch, dass "ExpandoObject keine Definition für Test enthält". Zu dem sage ich: "Ich weiß, das ist der verdammte Punkt!"C# dynamischer Objektinitialisierer wird nicht kompiliert

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

Irgendwelche Ideen, warum CSC dies nicht erlaubt.

Die Alternative besteht darin, den Code manuell in einzelne Eigenschaftszuweisungen zu erweitern.

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

Was nervt, wenn ich viele Eigenschaften zuweisen muss.

+2

Bitte stimme für diese Funktion in Visual Studio [UserVoice] (https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/7062098-support-object-initializer-on-expandoobjects) ab. – orad

Antwort

13

Innerhalb des Objektinitialisierers ist der Typ ExpandoObject, nicht dynamic, daher erhalten Sie keine dynamische Funktionalität. Nach der Initialisierer, Sie arbeiten auf eine Variable des Typs dynamic und so dynamische Funktionalität ist dort verfügbar.

+0

Ah, ja das macht Sinn. Der Objektinitialisierer _Ausdruck_ wird nicht als dynamisch eingegeben. –

6

In Ihrem ersten Beispiel sucht der C# -Compiler nach einer Eigenschaft namens Test für das ExpandoObject. Es existiert nicht.

In Ihrem zweiten Beispiel sucht der Compiler nach einer Test-Eigenschaft für ein dynamisches Objekt. Dies ist erlaubt, also kompiliert es.

Verwandte Themen