C# 4 中的 Expando 对象
2010-09-30 22:46:55 来源:WEB开发网由于这个行为,您只需要编辑 XML 文件来提供另一个数据集。但是,您如何才能使用这种动态变化的数据呢?您的 UI 需要足够灵活,以便接受一组变化的数据。
让我们举一个简单的示例。在这个示例中,您需要做的就是通过控制台显示数据。假设 XML 文件包含一个部分,用于描述期望的 UI(不管这在上下文中意味着什么)。例如,下面是我的代码:
<Settings>
<Output Format="{0}, {1}"
Params="LastName,FirstName" />
</Settings>
此信息将会通过以下代码加载到另一个 Expando 对象中:
dynamic settings = new ExpandoObject();
settings.Format =
node.Attribute("Format").Value;
settings.Parameters =
node.Attribute("Params").Value;
主要过程将具备以下结构:
public static void Run(String file) {
dynamic settings = GetExpandoSettings(file);
dynamic persons = GetExpandoFromXml(file);
foreach (var p in persons) {
var memberNames =
(settings.Parameters as String).
Split(',');
var realValues =
GetValuesFromExpandoObject(p,
memberNames);
Console.WriteLine(settings.Format,
realValues);
}
}
Expando 对象包含输出的格式,以及要显示其值的成员的名称。对于给定的 person 动态对象,您需要使用类似以下的代码加载指定成员的值:
public static Object[] GetValuesFromExpandoObject(
IDictionary<String, Object> person,
String[] memberNames) {
var realValues = new List<Object>();
foreach (var m in memberNames)
realValues.Add(person[m]);
return realValues.ToArray();
}
因为 Expando 对象实现了 IDictionary<String, Object>,您可以使用索引器 API 来获得和设置值。
最后,从 Expando 对象检索到的一系列值将会传递到控制台以供实际显示。图 6 显示了示例控制台应用程序的两个屏幕,其中的区别仅仅是基础 XML 文件的结构不同。
图 6 由一个 XML 文件驱动的两个示例控制台应用程序
不可否认,这个示例非常简单,但是它的实现机制与更有意思的示例是相似的。请试一试并向我们提供反馈!
更多精彩
赞助商链接