2

動的オブジェクトを試してみたところ、このコンパイルエラーが発生しました

ExpandoObject myObj = new ExpandoObject();
myObj.GivenName = "Testing";

System.Dynamic.ExpandoObject' には 'GivenName' の定義が含まれておらず、タイプ 'System.Dynamic.ExpandoObject' の最初の引数を受け入れる拡張メソッド 'GivenName' が見つかりませんでした

MSDN: ExpandoObjectを見ると、実際には別の方法で実行されました -dynamicキーワードを使用

dynamic myObj = new ExpandoObject();
myObj.GivenName = "Testing";

これについての説明は何ですか?また、キーワードmyObjを使用せずにインスタンスに値を割り当てることは可能ですか? dynamicあるかどうかを見ましたが.SetProperty、ありません。

ありがとう

アップデート

dynamicキーワードを使用する必要があることは理解しましたが、許可されている場合、この行は何に使用されますか

ExpandoObject myObj = new ExpandoObject();
4

2 に答える 2

6

これが機能するためには、変数を宣言する必要がありますdynamic。そうすれば、コンパイラは変数の一部への割り当てを延期しIDynamicMetaObjectProvider、プロパティには指定した値が与えられます。

ExpandoObject実際の型を指定するときに変数を入力することにより、このため、コンパイラはクラスの動的な側面を使用しません。

于 2012-10-11T16:43:40.883 に答える
2

変数を動的としてマークすると、その変数に関係することはすべて実行時に行われます。そのため、コンパイル中、コンパイラはGivenNametype に存在しないプロパティを認識しませんExpandoObject。ただし、動的として宣言すると、コンパイラはこの変数を気にせず、バインディングは実行時に行われます。

動的型を実装する方法の詳細については、http://msdn.microsoft.com/en-us/vstudio/ff800651.aspxを参照してください。

于 2012-10-11T16:45:16.170 に答える