C# 4 中的 Expando 对象
2010-09-30 22:46:55 来源:WEB开发网此代码使用 LINQ-to-XML 将原始内容加载到 Person 类的一个实例中:
public class Person {
public String FirstName { get; set; }
public String LastName { get; set; }
public String GetFullName() {
return String.Format("{0}, {1}", LastName, FirstName);
}
}
.NET Framework 4 提供了一个不同的 API 来实现相同的目的。此 API 是新的 ExpandoObject 类的中心,更容易编写,而且不需要您规划、编写、调试、测试和维护 Person 类。让我们深入探讨一下 ExpandoObject。
使用 ExpandoObject 类
Expando 对象不是为 .NET Framework 发明的,事实上,它们比 .NET 还早出现几年。我第一次听到有人用这个术语来描述 JScript 对象是在 20 世纪 90 年代中期。Expando 是一种可扩充的对象,其结构完全是在运行时定义的。在 .NET Framework 4 中,您像使用传统的托管对象一样使用 Expando,不同之处在于其结构不在任何程序集外读取,而完全是动态构建的。
Expando 对象非常适合对动态变化的信息进行建模,例如配置文件的内容。让我们看看如何使用 ExpandoObject 类来存储前述 XML 文档的内容。图 3 中显示了完整的源代码。
图 3 使用 LINQ-to-XML 将数据加载到 Expando 对象中
public static IList<dynamic> GetExpandoFromXml(String file) {
var persons = new List<dynamic>();
var doc = XDocument.Load(file);
var nodes = from node in doc.Root.Descendants("Person")
select node;
foreach (var n in nodes) {
dynamic person = new ExpandoObject();
foreach (var child in n.Descendants()) {
var p = person as IDictionary<String, object>);
p[child.Name] = child.Value.Trim();
}
persons.Add(person);
}
return persons;
}
更多精彩
赞助商链接