WEB开发网
开发学院软件开发C语言 二十行C#代码打造Ruby Markup Builder 阅读

二十行C#代码打造Ruby Markup Builder

 2010-09-30 21:05:26 来源:WEB开发网   
核心提示: 但是我们这些可怜的C#程序员难道只有在一边眼馋的份吗?不见得,我们也可以来“享受”一把:dynamicb=newXmlMarkupBuilder();XElementxml=b.persons(b.person("Tom",age:10),b.pers

但是我们这些可怜的C#程序员难道只有在一边眼馋的份吗?不见得,我们也可以来“享受”一把:

dynamic b = new XmlMarkupBuilder(); 
XElement xml = 
  b.persons( 
    b.person("Tom", age: 10), 
    b.person("Jerry", age: 8));

哇,这是什么,怎么代码那么简单。很明显,从dynamic关键字上可以看出,这是C# 4.0中新增的功能。您可能会想“原来.NET 4.0对XML又有增强了”……其实并非如此,这是我们自己扩展的功能。不过这应该算是更好的消息,因为这说明我们已经有能力自行扩展,自行设计这样的 API了——这可是“渔”,比“鱼”可要值钱多了。而实现这样的功能也只需要短短二十几行C#代码:

public class XmlMarkupBuilder : DynamicObject 
{ 
  public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) 
  { 
    XElement xml = new XElement(binder.Name); 
 
    var attrCount = binder.CallInfo.ArgumentNames.Count; 
    var elementCount = args.Length - attrCount; 
 
    for (int i = 0; i < elementCount; i++) 
    { 
      xml.Add(args[i]); 
    } 
 
    for (var i = 0; i < attrCount; i++) 
    { 
      var attrName = binder.CallInfo.ArgumentNames[i]; 
      if (attrName[0] == '@') attrName = attrName.Substring(1); 
 
      xml.Add(new XAttribute(attrName, args[i + elementCount])); 
    } 
 
    result = xml; 
    return true; 
  } 
}

上一页  1 2 3 4  下一页

Tags:十行 代码 打造

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