ExpandoObject 的真正好处
简介
.NET 4 中引入的 ExpandoObject 类允许开发人员在运行时动态地将属性分配给对象。这引发了人们对其相对于传统字典结构的优势的质疑。
语法糖
虽然 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 的一个潜在优势在于它创建复杂层次对象的能力。例如:
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中文网其他相关文章!