2010-11-18 20 views
13

次のコードは私にとって妥当と思われます。それは、オブジェクトを作成し、私が好きなプロパティを割り当てることができる動的な機能を使用する必要があります。しかし、コンパイラは、 "ExpandoObjectにはTestの定義が含まれていません"と言います。私が言っているのは、「わかった、それは気に障る点だ!C#動的オブジェクトの初期化子はコンパイルされません

なぜcscがこれを許可していないのですか。

代わりに、手動でコードを個々のプロパティの割り当てに展開することもできます。

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

割り当てたいプロパティがたくさんあるときには迷惑です。

+2

Visual Studio [UserVoice](https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/7062098-support-object-initializers-on-expandoobjects)でこの機能に投票してください。 – orad

答えて

13

オブジェクトイニシャライザでは、タイプはであり、dynamicではなく、動的な機能はありません。 イニシャライザの後には、タイプdynamicの変数で動作しているため、動的機能です。

+0

ああ、そうだよ。オブジェクトイニシャライザ_expression_は、ダイナミックとして型指定されていません。 –

6

最初の例では、C#コンパイラはExpandoObjectでTestという名前のプロパティを探します。それは存在しません。

2番目の例では、コンパイラは動的オブジェクトのTestプロパティを探します。これは許可されているため、コンパイルされます。

関連する問題