WEB开发网
开发学院软件开发C语言 C# 4 中的 Expando 对象 阅读

C# 4 中的 Expando 对象

 2010-09-30 22:46:55 来源:WEB开发网   
核心提示: 由于这个行为,您只需要编辑 XML 文件来提供另一个数据集,C# 4 中的 Expando 对象(9),但是,您如何才能使用这种动态变化的数据呢?您的 UI 需要足够灵活,图 6 由一个 XML 文件驱动的两个示例控制台应用程序不可否认,这个示例非常简单,以便接受一组变化的数据,让我们举一个简单

由于这个行为,您只需要编辑 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 文件的结构不同。

C# 4 中的 Expando 对象

图 6 由一个 XML 文件驱动的两个示例控制台应用程序

不可否认,这个示例非常简单,但是它的实现机制与更有意思的示例是相似的。请试一试并向我们提供反馈!

上一页  4 5 6 7 8 9 

Tags:Expando 对象

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接