• c# dynamic动态类型和匿名类


    dynamic类型

    简单示例

    dynamic expando = new System.Dynamic.ExpandoObject(); //动态类型字段 可读可写
    expando.Id = 1;
    expando.Name = "Test";
    string json = Utils.ConvertJson.JsonEncode(expando);  //输出{Id:1,Name:'Test'}

    //动态添加字段 

    List<string> fieldList = new List<string>() { "Name","Age","Sex"}; //From config or db

    dynamic dobj = new System.Dynamic.ExpandoObject();

    var dic = (IDictionary<string, object>)dobj;
    foreach (var fieldItem in fieldList)
    {
      dic[fieldItem] = "set "+fieldItem+" value";  /*实现类似js里的 动态添加属性的功能

                                                                            var obj={};
                                                                            var field="Id";

                                                                            eval("obj."+field+"=1");

                                                                            alert(obj.Id); //1  */


    }
    var val = dobj.Name; //“set Name value”

    var val1=dobj.Age;//”set Age value“

     枚举该对象所有成员

    foreach (var fieldItem in (IDictionary<String, Object>)dobj)
    {
      var v = (fieldItem.Key + ": " + fieldItem.Value);
    }

    匿名类

    //var aaaa = new {Id=1,Name="Test"}; //匿名类字段只读不可写

    dynamic aaaa = new {Id=1,Name="Test"}; //匿名类字段只读不可写
    aaaa.Id = 2; //不可写 报错无法为属性或索引器“<>f__AnonymousType1<int>.Id”赋值 - 它是只读的

    dynamic obj = Newtonsoft.Json.JsonConvert.DeserializeObject("{Name:'aa',Sex:'Male',Age:11}");
    var name = obj.Name.Value; //aa

    原文地址:http://www.cnblogs.com/xuejianxiyang/p/4964739.html

  • 相关阅读:
    RocketMQ实战:生产环境中,autoCreateTopicEnable为什么不能设置为true
    x 的平方根--二分查找
    责任链模式--设计模式
    迭代器模式--设计模式
    组合模式--设计模式
    搜索旋转排序数组II
    搜索旋转排序数组--二分查找
    搜索插入位置--二分查找
    越狱详解与调试--逆向开发
    有序链表转换二叉搜索树--链表
  • 原文地址:https://www.cnblogs.com/xuejianxiyang/p/4964739.html
Copyright © 2020-2023  润新知