项目中很多地方采用dynamic新特性进行开发,因此本人参看了很多关于dynamic的资料。在新的一年开始 ,记录下自己的学习经验。
dynamic关键字用于声明一个动态对象,然后通过该动态对象去调用方法或 读写属性。
(一)测试Alexandra Rusina提供的参考资料
参考 http://blogs.msdn.com/b/csharpfaq/archive/2009/10/19/dynamic-in-c-4-0-creating-wrappers-with- dynamicobject.aspx ,因此对该地址的博文中DynamicXMLNode类进行相应的学习与测试。测试如下:
static void Main(string[] args) { //正常运行 RunDynamicXMLNode(true); //异常运行 RunDynamicXMLNode(false); Console.ReadLine(); }
private static void RunDynamicXMLNode(bool state) { Console.WriteLine("------RUN begin------"); try { dynamic contact = new DynamicXMLNode("Contacts"); contact.Name = "Patrick Hines"; if (state) { contact.Address = new DynamicXMLNode(); } contact.Address.Street = "123 Main St"; } catch (RuntimeBinderException ex) { Console.WriteLine(ex.Message); } Console.WriteLine("------RUN end--------"); }
运行后显示结果如下:
设置断点进行单步调试,发现TryGetMember方法中:如果当前元素XElement下没有相应的XName的 子元素,那么result = null;
正常运行contact.Address = new DynamicXMLNode();创建了一个新的 dynamic对象。反之,contact.Address =null;将导致RuntimeBinderException异常。
public override bool TryGetMember(GetMemberBinder binder, out object result) { XElement getNode = node.Element(binder.Name); if (getNode != null) { result = new DynamicXMLNode(getNode); return true; } else { result = null; return false; } }
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索运行
, result
, dynamic
, console
, address
, contact
开发Dynamic
xml excel相互转换、xml string 相互转换、dynamic 序列化 xml、dynamic转换为object、dynamic 转换list,以便于您获取更多的相关知识。