类A需要添加功能,我们想到的就是在类A中添加公共方法,这个显而易见肯定可以,但是由于某种原因,你不能修改类A本身的代码,但是确实又需要增加功能到类A中去,怎么办? 这个时候扩展方法(Extension Methods)就会帮助你完成上述功能了。现在举例如下为DataTable添加一个转ToEntities方法:

扩展方法实现:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks; namespace CNN
{
//必需静态类
public static class ExtendClass
{
//必需静态方法,并且使用this关键字修饰
public static IEnumerable<T> ToEntitys<T>(this DataTable @this) where T : new()
{
Type type = typeof(T);
PropertyInfo[] properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public);
FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public);
List<T> list = new List<T>();
foreach (DataRow dr in @this.Rows)
{
T entity = (default(T) == null) ? Activator.CreateInstance<T>() : default(T);
PropertyInfo[] array = properties;
for (int i = ; i < array.Length; i++)
{
PropertyInfo property = array[i];
if (@this.Columns.Contains(property.Name))
{
Type valueType = property.PropertyType;
property.SetValue(entity, dr[property.Name].To(valueType), null);
}
}
FieldInfo[] array2 = fields;
for (int j = ; j < array2.Length; j++)
{
FieldInfo field = array2[j];
if (@this.Columns.Contains(field.Name))
{
Type valueType2 = field.FieldType;
field.SetValue(entity, dr[field.Name].To(valueType2));
}
}
list.Add(entity);
}
return list;
}
}
}

扩展方法使用:

DataTable dt = GetTable();
var list = dt.ToEntitys<MyEntitie>();

C#扩展方法 DataTable.ToEntitys的更多相关文章

  1. 扩展方法 DataTable的ToList<T>

    using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.T ...

  2. DataTable扩展方法ToList<T>()、ToJSON()、ToArrayList()

    /// <summary> /// 扩展方法类 /// </summary> public static class CommonExtension { /// <sum ...

  3. C#中DataTable与实体集合通用转换(使用扩展方法)

    本案例提供了:把DataRow转换为单个实体.dataTable转换为List泛型支持时间格式转换. 下文的方法都是扩展方法.扩展方法要求写在静态类中,方法也要静态. 它必须在一个非嵌套.非泛型的静态 ...

  4. 【转】给DataTable和DataRow扩展方法,直接转换为对象集合或对象

    /// <summary> /// 类 说 明:给DataTable和DataRow扩展方法,直接转换为对象集合或对象 /// 补充说明:此扩展类可以极大的简化操作,但是性能低下,大数据以 ...

  5. DataTable和DataRow利用反射直接转换为Model对象的扩展方法类

    DataTable和DataRow利用反射直接转换为Model对象的扩展方法类   /// <summary> /// 类 说 明:给DataTable和DataRow扩展方法,直接转换为 ...

  6. C# DataTable扩展方法

    在日常搬砖中,总结了一些简单的扩展方法. public static bool IsNullOrEmpty(this DataTable dt) { ; } public static bool Is ...

  7. (原创)[C#] DataTable排序扩展方法

    一,前言 DataTable的应用极其广泛,对DataTable进行排序也有很多方式,每种的实现方式都不难,但是使用起来却比较繁琐,所以本人便写了一个扩展方法,专门对DataTable进行操作. 本篇 ...

  8. 分享.NET系统开发过程中积累的扩展方法

    .NET 3.5提供的扩展方法特性,可以在不修改原类型代码的情况下扩展它的功能.下面分享的这些扩展方法大部分来自于Code Project或是Stackoverflow,.NET为此还有一个专门提供扩 ...

  9. 译:泛型List集合转化为DateTable的扩展方法

    译文出处:http://www.codeproject.com/Tips/867866/Extension-Method-for-Generic-List-Collection-to-Da 这段代码是 ...

随机推荐

  1. docker配置Nginx

    创建及进入docker容器$docker run -p 80 --name web01 -i -t ubuntu /bin/bash 创建html文件夹$mkdir -p /var/www/html ...

  2. Peakvue和自相关技术轴承诊断

    什么是应力波 应力波产生于“金属与金属相互碰撞的事件” 加速度传感器捕捉含有具有短时特性应力波的轴承振动信号 应力波是一种非常短暂的连续的脉冲信号, 通常在百万分之一秒到千分之一秒的区间范围内, 它是 ...

  3. Codeforces 954 dijsktra 离散化矩阵快速幂DP 前缀和二分check

    A B C D 给你一个联通图 给定S,T 要求你加一条边使得ST的最短距离不会减少 问你有多少种方法 因为N<=1000 所以N^2枚举边数 迪杰斯特拉两次 求出Sdis 和 Tdis 如果d ...

  4. ubuntu16.04下docker安装和简单使用(转)

    ubuntu16.04下docker安装和简单使用   转自:https://www.cnblogs.com/hupeng1234/p/9773770.html 前提条件 操作系统 docker-ce ...

  5. 刷PTA这一周的感悟

    在慕课上报名了浙江大学的<数据结构>这门课,主讲人陈越老师,何钦铭老师,两位老师讲的很好,课后有配套的PTA可以用来做题,练习. 最近在PTA上刷题,发现自己代码实现能力是真的差劲,一开始 ...

  6. 写api接口神器--带你5分钟了解swagger

    随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.先后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远. 前端和后端的唯一联系,变成了API接口:API文档变成了 ...

  7. springcloud 配置actuator

    pom.xml <!--Spring Boot Actuator,感应服务端变化--> <dependency> <groupId>org.springframew ...

  8. 1.docker容器技术基础入门

    内容来自:https://www.cnblogs.com/marility/p/10215062.html https://blog.51cto.com/gouyc/2310785?source=dr ...

  9. Javascript获取页面元素相对和绝对位置

    制作网页的过程中,你有时候需要知道某个元素在网页上的确切位置. 下面的教程总结了Javascript在网页定位方面的相关知识. 一.网页的大小和浏览器窗口的大小 首先,要明确两个基本概念. 一张网页的 ...

  10. 查询重复数据group by menu_id having count(menu_id)>1

    select * from sys_power_menu WHERE menu_id in ( select menu_id from  sys_power_menu group by menu_id ...