• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#对象克隆,DataTable转LIST

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
public class ConvertHelper<T> where T : new()
    {
        private static string module = "ConvertHelper.cs";

        public static ObservableCollection<T> ConvertToList(List<T> listobject)
        {
            ObservableCollection<T> collection = null;
            try
            {
                collection = new ObservableCollection<T>(listobject);
            }
            catch (Exception ex)
            {
                ServiceLocator.Current.GetInstance<IWriteLog>().Log(LogConstant.LogType.Exception, module,
                   "Error occurs on ConvertToList modules: {0}.", ex.Message);
            }

            return collection;
        }

        public static ObservableCollection<T> ConvertToObservable(DataTable dt)
        {
            ObservableCollection<T> collection = null;

            // 定义集合
            List<T> ts = new List<T>();

            try
            {
                // 获得此模型的类型
                Type type = typeof(T);

                // 定义一个临时变量
                string tempName = string.Empty;

                // 遍历DataTable中所有的数据行
                foreach (DataRow dr in dt.Rows)
                {
                    T t = new T();

                    // 获得此模型的公共属性
                    PropertyInfo[] propertys = t.GetType().GetProperties();

                    // 遍历该对象的所有属性
                    foreach (PropertyInfo pi in propertys)
                    {
                        // 将属性名称赋值给临时变量
                        tempName = pi.Name;

                        // 检查DataTable是否包含此列(列名==对象的属性名)  
                        if (dt.Columns.Contains(tempName))
                        {
                            // 判断此属性是否有Setter 该属性不可写,直接跳出
                            if (!pi.CanWrite) continue;

                            // 取值
                            object value = dr[tempName];

                            // 如果非空,则赋给对象的属性
                            if (value != DBNull.Value)
                                pi.SetValue(t, value.ToString(), null);
                        }
                    }

                    // 对象添加到泛型集合中
                    ts.Add(t);
                }
                collection = new ObservableCollection<T>(ts);
            }
            catch (Exception ex)
            {
                ServiceLocator.Current.GetInstance<IWriteLog>().Log(LogConstant.LogType.Exception, module,
                  "Error occurs on ConvertToList modules: {0}.", ex.Message);
            }

            return collection;
        }

        /// 利用反射和泛型
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static List<T> ConvertToList(DataTable dt)
        {
            // 定义集合
            List<T> ts = new List<T>();

            try
            {
                // 获得此模型的类型
                Type type = typeof(T);

                // 定义一个临时变量
                string tempName = string.Empty;

                // 遍历DataTable中所有的数据行
                foreach (DataRow dr in dt.Rows)
                {
                    T t = new T();

                    // 获得此模型的公共属性
                    PropertyInfo[] propertys = t.GetType().GetProperties();

                    // 遍历该对象的所有属性
                    foreach (PropertyInfo pi in propertys)
                    {
                        // 将属性名称赋值给临时变量
                        tempName = pi.Name;

                        // 检查DataTable是否包含此列(列名==对象的属性名)  
                        if (dt.Columns.Contains(tempName))
                        {
                            // 判断此属性是否有Setter 该属性不可写,直接跳出
                            if (!pi.CanWrite) continue;

                            // 取值
                            object value = dr[tempName];

                            // 如果非空,则赋给对象的属性
                            if (value != DBNull.Value)
                                pi.SetValue(t, value.ToString(), null);
                        }
                    }

                    // 对象添加到泛型集合中
                    ts.Add(t);
                }
            }
            catch (Exception ex)
            {
                ServiceLocator.Current.GetInstance<IWriteLog>().Log(LogConstant.LogType.Exception, module,
                  "Error occurs on ConvertToList modules: {0}.", ex.Message);
            }

            return ts;
        }
    }

 

对象克隆赋值

 /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            List<Test> list = new List<Test>();
            Test test = new Test();
           
            test.ID = "1";
            test.NAME = "xz";
            list.Add(test);
            Test test1=new Test ();
            CopyValue(list[0], test1);

            test1.NAME = "xznihoa";
            list.Add(test1);
        }

        public static void CopyValue(object origin, object target)
        {
            System.Reflection.PropertyInfo[] properties = (target.GetType()).GetProperties();
            System.Reflection.PropertyInfo[]   fields = (origin.GetType()).GetProperties();
            for (int i = 0; i < fields.Length; i++)
            {
                for (int j = 0; j < properties.Length; j++)
                {
                    if (fields[i].Name == properties[j].Name && properties[j].CanWrite)
                    {
                        properties[j].SetValue(target, fields[i].GetValue(origin,null), null);
                    }
                }
            }
        }

    }

    public class Test
    {
        public string ID { get; set; }

        public string NAME { get; set; }
    }

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
【转载】C#验证控件的使用方法(RegularExpressionValidator)的使用发布时间:2022-07-13
下一篇:
c#访问共享文件发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap