列表

         #region 列表相关
        public static void Clone(Type type, object srcData, object destData)
        {
            //复制基类数据
            Type baseType = type;

            FieldInfo[] baseAllFields = null;
            baseAllFields = baseType.GetFields(BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance | BindingFlags.Static);

            if (baseAllFields != null || baseAllFields.Length > 0)
            {
                foreach (FieldInfo field in baseAllFields)
                {
                    object value = field.GetValue(srcData);
                    field.SetValue(destData, value);
                }
            }
            if (baseType.BaseType != null)
                Clone(baseType.BaseType, srcData, destData);
        }

        public static object Clone(object srcData)
        {

            Type typeData = srcData.GetType();

            FieldInfo[] allFields = null;
            allFields = typeData.GetFields(BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance | BindingFlags.Static);

            if (allFields == null || allFields.Length < 1)
                return null;

            object destData = Activator.CreateInstance(typeData);

            foreach (FieldInfo field in allFields)
            {
                object value = field.GetValue(srcData);
                field.SetValue(destData, value);
            }
            if (typeData.BaseType != null)
                Clone(typeData.BaseType, srcData, destData);

            return destData;
        }

        public static bool Equal(object srcData, object destData)
        {
            return Equal(srcData, destData, null, null);
        }
        /// <summary>
        /// 比较对象是否相等
        /// </summary>
        /// <param name="srcData">源数据</param>
        /// <param name="destData">要比较的数据</param>
        /// <param name="rejectiveFields">不比较的成员变量名</param>
        /// <param name="rejectiveTypes">不比较的成员变量类型</param>
        /// <returns></returns>
        public static bool Equal(object srcData, object destData, string[] rejectiveFields, Type[] rejectiveTypes)
        {
            if (srcData.GetType() != destData.GetType())
                return false;

            Type typeData = srcData.GetType();

            FieldInfo[] allFields = null;
            allFields = typeData.GetFields(BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance | BindingFlags.Static);

            if (allFields == null || allFields.Length < 1)
                return true;

            foreach (FieldInfo field in allFields)
            {
                object srcValue = field.GetValue(srcData);
                object destValue = field.GetValue(destData);

                bool isContine = false;
                if (rejectiveFields != null)
                {
                    foreach (string rejectiveField in rejectiveFields)
                    {
                        if (rejectiveField == field.Name)
                        {
                            isContine = true;
                            break;
                        }
                    }

                    if (isContine == true)
                        continue;
                }
                if (rejectiveTypes != null)
                {
                    foreach (Type rejectiveType in rejectiveTypes)
                    {
                        if (rejectiveType == srcValue.GetType())
                        {
                            isContine = true;
                            break;
                        }
                    }
                    if (isContine == true)
                        continue;
                }
                if (object.Equals(srcValue, destValue) == false)
                    return false;
            }
            return true;
        }
        #endregion

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值