using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Data;
using System.Reflection;
using System.Collections;
using System.Data.Common;
using System.Diagnostics;
namespace ceDemo
{
class Program
{
static void Main(string[] args)
{
List<csDemp> mdList = sp.GetDataInstanceList<csDemp>();
}
}
public static class PropertyExtensions
{
public static void FastSetValue(this PropertyInfo propertyInfo, object obj, object value)
{
if (propertyInfo == null)
{
throw new ArgumentNullException("propertyInfo");
}
GetterSetterFactory.GetPropertySetterWrapper(propertyInfo).Set(obj, value);
}
}
public static class GetterSetterFactory
{
private static readonly Hashtable s_setterDict = Hashtable.Synchronized(new Hashtable(1024));
internal interface ISetValue
{
void Set(object target, object val);
}
internal static ISetValue GetPropertySetterWrapper(PropertyInfo propertyInfo)
{
var property = (ISetValue)s_setterDict[propertyInfo];
if (property == null)
{
property = CreatePropertySetterWrapper(propertyInfo);
s_setterDict[propertyInfo] = property;
}
return property;
}
internal static ISetValue CreatePropertySetterWrapper(PropertyInfo propertyInfo)
{
if (propertyInfo == null)
{
throw new ArgumentNullException("propertyInfo");
}
if (propertyInfo.CanWrite == false)
{
throw new NotSupportedException("属性不支持写操作。");
}
var mi = propertyInfo.GetSetMethod(true);
if (mi.GetParameters().Length > 1)
{
throw new NotSupportedException("不支持构造索引器属性的委托。");
}
var instanceType = typeof(SetterWrapper<,>).MakeGenericType(propertyInfo.DeclaringType, propertyInfo.PropertyType);
return (ISetValue)Activator.CreateInstance(instanceType, propertyInfo);
}
public static void Clear()
{
s_setterDict.Clear();
}
}
public class SetterWrapper<TTarget, TValue> : GetterSetterFactory.ISetValue
{
private Action<TTarget, TValue> _setter;
public SetterWrapper(PropertyInfo propertyInfo)
{
if (propertyInfo == null)
{
throw new ArgumentNullException("propertyInfo");
}
if (propertyInfo.CanWrite == false)
{
throw new NotSupportedException("属性不支持写操作。");
}
var m = propertyInfo.GetSetMethod(true);
_setter = (Action<TTarget, TValue>)Delegate.CreateDelegate(typeof(Action<TTarget, TValue>), null, m);
}
public void SetValue(TTarget target, TValue val)
{
_setter(target, val);
}
public void Set(object target, object val)
{
_setter((TTarget)target, (TValue)val);
}
}
public class sp
{
/// <summary>
/// 获取实体列表
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="functionName">方法名</param>
/// <param name="paramList">参数列表</param>
/// <returns>实体列表</returns>
public static List<T> GetDataInstanceList<T>()
{
List<T> lists = new List<T>();
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("id"));
dt.Columns.Add(new DataColumn("Name"));
DataRow row0 = dt.NewRow();
row0[0] = "1";
row0[1] = "张三";
dt.Rows.Add(row0);
DataRow row3 = dt.NewRow();
row3[0] = "2";
row3[1] = "李四";
dt.Rows.Add(row3);
DataRow row5 = dt.NewRow();
row5[0] = "3";
row5[1] = "王五";
dt.Rows.Add(row5);
var dataType = typeof(T);
var infos = dataType.GetProperties(BindingFlags.Instance | BindingFlags.Public);
foreach (DataRow row in dt.Rows.AsParallel())
{
var obj =(T)Activator.CreateInstance(dataType);
foreach (DataColumn col in dt.Columns.AsParallel())
{
try
{
foreach (PropertyInfo info in infos)
{
if (info.Name.ToLower() == col.ColumnName.ToLower())
{
if (row[col].GetType().FullName != "System.DBNull")
{
info.FastSetValue(obj, row[col]);
}
}
}
}
catch
{
}
}
lists.Add(obj);
}
GetterSetterFactory.Clear();
return lists;
}
public static T GetCopy<T>()
{
var obj = typeof(T);
var tar_obj = (T)Activator.CreateInstance(obj);
Type typeinstance = obj.GetType();
foreach (PropertyInfo property in typeinstance.GetProperties())
{
property.SetValue(tar_obj, property.GetValue(obj, null), null);
}
return tar_obj;
}
}
public class csDemp
{
public string id { get; set; }
public string name { get; set; }
}
}