返回集合

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; }
    }




}

 

posted @ 2014-08-20 17:30  s_p  阅读(295)  评论(0编辑  收藏  举报