• C# 对象间的 深拷贝 实现


        以下的这个类实现了 2个含有部分字段名字相同 的对象的 赋值拷贝。


    public class ShallowCopyHelper
        {
            public static void CopyPropertiesValue(object objFrom, object objTo)
            {
                if (null == objFrom)
                {
                    return;
                }

                if (null == objTo)
                {
                    return;
                }

                Type typeFrom = objFrom.GetType();
                Type typeTo = objTo.GetType();

                if (objFrom is IList)
                {
                    try
                    {
                        int count = (objFrom as IList).Count;
                        for (int i = 0; i < count; i++)
                        {
                            CopyPropertiesValue((objFrom as IList)[i], (objTo as IList)[i]);
                        }
                    }
                    catch
                    {
                        //
                    }
                }
                else
                {
                    foreach (System.Reflection.PropertyInfo pi in
                        typeFrom.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance))
                    {
                        try
                        {
                            object valueFrom = typeFrom.GetProperty(pi.Name).GetValue(objFrom, null);
                            object valueTo = typeTo.GetProperty(pi.Name).GetValue(objTo, null);

                            if (typeFrom.GetProperty(pi.Name).PropertyType.IsClass
                                && !typeFrom.GetProperty(pi.Name).PropertyType.IsPrimitive
                                && !(valueFrom is String))
                            {
                                CopyPropertiesValue(valueFrom, valueTo);
                            }
                            else
                            {
                                if (valueFrom == null || !valueFrom.Equals(valueTo))
                                {
                                    //Set value to latest data
                                    typeTo.GetProperty(pi.Name).SetValue(objTo, valueFrom, null);
                                }
                            }
                        }
                        catch
                        {
                            //
                        }

                    }
                }
            }
        }
  • 相关阅读:
    Java反射在Android中的使用
    配置adb环境变量
    Android Studio 生成Release版,报Warning的解决办法
    Android Studio导入System Library步骤
    Windows 10 Java环境变量配置
    做一个有内涵的程序猿
    简述Python2与Python3的区别
    对不起,您输入的内容不合法
    python的数据类型
    python三器——装饰器/迭代器/生成器
  • 原文地址:https://www.cnblogs.com/muzizongheng/p/3169138.html
Copyright © 2020-2023  润新知