ExpandoObject の真の利点
概要
.NET 4 で導入された ExpandoObject クラス開発者は実行時にプロパティをオブジェクトに動的に割り当てることができます。このため、従来の辞書構造に対する利点について疑問が生じています。
Syntactic Sugar
ExpandoObject はプロパティ アクセスを簡素化することで構文を強化しているように見えますが、重要な機能は提供しません。辞書よりも優れた利点があります。次のコード:
dynamic obj = new ExpandoObject(); obj.MyInt = 3; obj.MyString = "Foo"; Console.WriteLine(obj.MyString);
は本質的に次と同等です:
var obj = new Dictionary<string, object>(); obj["MyInt"] = 3; obj["MyString"] = "Foo"; Console.WriteLine(obj["MyString"]);
階層オブジェクト表現
ExpandoObject の潜在的な利点の 1 つは、複雑な階層オブジェクトを作成する機能。例:
Dictionary<String, object> dict = new Dictionary<string, object>(); Dictionary<String, object> address = new Dictionary<string,object>(); dict["Address"] = address; address["State"] = "WA"; Console.WriteLine(((Dictionary<string,object>)dict["Address"])["State"]);
このコードは ExpandoObject を使用すると大幅に読みやすくなります。
dynamic expando = new ExpandoObject(); expando.Address = new ExpandoObject(); expando.Address.State = "WA"; Console.WriteLine(expando.Address.State);
イベント処理とプロパティ通知
ExpandoObject はINotifyPropertyChanged インターフェイス。辞書と比較してプロパティをより詳細に制御できます。さらに、イベントを ExpandoObject に追加して、動的なイベント処理を可能にすることができます。
以上がExpandoObject と Dictionary: 動的プロパティの割り当てが実際の利点をもたらすのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。