DataTable dt = new DataTable("TableOne");

dt.Columns.Add("ID", typeof(int));
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Age", typeof(int));

dt.Rows.Add(1, "zyb", 24);
        dt.Rows.Add(2, "sjn", 22);
        dt.Rows.Add(3, "zybsjn", 46);

string name = string.Empty;

List<dynamic> dylit = new List<dynamic>();

foreach (DataRow row in dt.Rows)
        {
            dynamic dy = new DynamicData();
            foreach (DataColumn col in dt.Columns)
            {
                dy[col.ColumnName] = row[col.ColumnName];
            }
            dylit.Add(dy);
        }

实例化dynamic前需要写一个类,该类继承自DynamicObject如下:

public class DynamicData : DynamicObject
{
    /// <summary>
    /// 内置集合参数
    /// </summary>
    private readonly Dictionary<string, object> _objEntity = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);

/// <summary>
    /// Provides the implementation of getting a member.  Derived classes can override
    /// this method to customize behavior.  When not overridden the call site requesting the
    /// binder determines the behavior.
    /// </summary>
    /// <param name="binder">The binder provided by the call site.</param>
    /// <param name="result">The result of the get operation.</param>
    /// <returns>true if the operation is complete, false if the call site should determine behavior.</returns>
    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        //object objValue;
        //_objEntity.TryGetValue(binder.Name, out objValue);
        //result = objValue;
        _objEntity.TryGetValue(binder.Name, out result);
        return true;
    }

/// <summary>
    /// Provides the implementation of setting a member.  Derived classes can override
    /// this method to customize behavior.  When not overridden the call site requesting the
    /// binder determines the behavior.
    /// </summary>
    /// <param name="binder">The binder provided by the call site.</param>
    /// <param name="value">The value to set.</param>
    /// <returns>true if the operation is complete, false if the call site should determine behavior.</returns>
    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        //Dictionary<string, object>总是可以设置value,不管key存不存在
        _objEntity[binder.Name] = value;
        return true;
    }

/// <summary>
    ///  返回所有动态成员的Name的列表
    /// </summary>
    /// <returns>动态成员名称的列表</returns>
    public override IEnumerable<string> GetDynamicMemberNames()
    {
        return _objEntity.Keys;
    }

/// <summary>
    /// 通过动态类型的成员名称获取值
    /// </summary>
    /// <param name="name">成员的名称</param>
    /// <returns>该成员的值,key不存在时返回null</returns>
    public object this[string name]
    {
        get
        {
            object value;
            _objEntity.TryGetValue(name, out value);
            return value;
        }
        set
        {
            _objEntity[name] = value;
        }
    }
}

如何使用dynamic的更多相关文章

  1. var和dynamic的区别

    1.var 1.均是声明动态类型的变量. 2.在编译阶段已经确定类型,在初始化的时候必须提供初始化的值. 3.无法作为方法参数类型,也无法作为返回值类型. 2.dynamic 1.均是声明动态类型的变 ...

  2. 遍历dynamic的方式

    一.遍历ExpandoObject /// <summary> /// 遍历ExpandoObject /// </summary> [TestMethod] public v ...

  3. C# dynamic 动态创建 json

    1. 如何通过C# 的dynamic 创建如下json 对象? { "query": { "match": [{ "name": " ...

  4. BZOJ 1901: Zju2112 Dynamic Rankings[带修改的主席树]【学习笔记】

    1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 7143  Solved: 2968[Su ...

  5. 当类型为dynamic的视图模型遭遇匿名对象

    当年在ASP.NET MVC 1.0时代我提到,在开发时最好将视图的Model定制为强类型的,这样可以充分利用静态检查功能进行排错.不过有人指出,这么做虽然易于静态检查,但是定义强类型的Model类型 ...

  6. 动态规划 Dynamic Programming

    March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...

  7. 理解C# 4 dynamic(4) – 让人惊艳的Clay

    Clay非常类似于ExpandoObject, 可以看做是ExpandoObject的加强版. 它们能够让我们在不需要定义类的情况下,就构建出我们想要的对象.Clay和ExpandoObject相比, ...

  8. [原创] C# dynamic拼接Json串

    using Newtonsoft.Json; 之前拼接两个json串,是用的这样的代码 , json1.Length - ); json2 = json2.Insert(json2 - , tmp); ...

  9. dynamic 用法

    private static string GetNameValue(object value) { dynamic obj = value; try { return obj.Name; } cat ...

  10. Euler Tour Tree与dynamic connectivity

    Euler Tour Tree最大的优点就是可以方便的维护子树信息,这点LCT是做不到的.为什么要维护子树信息呢..?我们可以用来做fully dynamic connectivity(online) ...

随机推荐

  1. js的数组操作

    用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一下狠心,我学!呵 ...

  2. 【UVA 10307 Killing Aliens in Borg Maze】最小生成树, kruscal, bfs

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20846 POJ 3026是同样的题,但是内存要求比较严格,并是没有 ...

  3. Linux系统中“动态库”和“静态库”那点事儿

    摘自http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在 ...

  4. SQL Server中的临时表和表变量

    SQL Server中的临时表和表变量 作者:DrillChina出处:blog2008-07-08 10:05 在SQL Server的性能调优中,有一个不可比拟的问题:那就是如何在一段需要长时间的 ...

  5. 设计师Yoyo:为用户设计产品,让他们生活更美好

    Yoyo设计走过的路:纽约爱立信,西雅图美国在线,硅谷雅虎,ATT,深圳腾讯,华为:Yoyo不仅是顶级的交互体验设计师,还是很Open的知识分享者,从职业选择,以及对年轻人的建议几个角度,摘录他的文章 ...

  6. springMVC在JSP页面取map值

    在springmMVC中.jsp页面取得map值. 在controller层: Map<String, Object> map = new HashMap<String, Objec ...

  7. C#软件winform程序安装包制作及卸载程序制作

    使用vs2010 winform程序开发的软件的人比较多,程序的开发是为了在不同的人不同的机器使用,为了使不同的机器能使用该软件就需要在制作程序安装包,安装包里必须包含该软件运行所选的所有环境,下面就 ...

  8. C#获取URL参数值(NameValueCollection)

    在写程序的时候,我们经常需要对页面进行传参数,比如page?id=1234,那么在page这个页面中就直接可以使用string id = Request.QueryString["id&qu ...

  9. Hadoop 安装(3) JDK 的安装

    使用vsftp上传,JDK 和 Hadoop 到 Hadoop 用户目录. 安装JDK root 身份登录Slave4.Hadoop,在 /usr 下创建 "Java"文件夹,将j ...

  10. Linux自制离线源,利用百度网盘等下载离线资源

    CentOS安装Axel: 目前yum源上没有Axel,我们可以到http://pkgs.repoforge.org/axel/下载rpm包安装. 32位CentOS执行下面命令: wget -c h ...