比较二个对象的每个值是否相等

本文介绍了一种比较两个对象所有属性值的方法,并提供了一个实用的函数实现。此外,还展示了如何根据对象属性名称获取其对应的值,适用于SQL参数化查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  /// <summary>
       ///(比较 二个对象的每个值是否相等) 获取实体类里面所有的名称、值、DESCRIPTION值
       /// </summary>
       /// <typeparam name="T">比较的对象</typeparam>
       /// <param name="t1">原对象</param>
       /// <param name="t2">现对象</param>
       /// <returns></returns>
        public static string CompareObjectValue<T>(T t1, T t2)
        {
            string tStr = string.Empty;
            try
            {                
                if (t1 == null || t2 == null)
                {
                    return tStr;
                }
                System.Reflection.PropertyInfo[] properties = t1.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);

                if (properties.Length <= 0)
                {
                    return tStr;
                }
                foreach (System.Reflection.PropertyInfo item in properties)
                {
                    string name = item.Name; //名称
                    object value = item.GetValue(t1, null);  //值  
                    object value2 = item.GetValue(t2, null);   //值 2
                    if (value == null)
                        value = DBNull.Value;
                    else if (item.PropertyType.Name == "DateTime" && Convert.ToDateTime(value) == DateTime.MinValue)
                        value = DBNull.Value;//防止数据库是smalldatetime类型时DateTime.MinValue溢出

                    if (value2 == null)
                        value2 = DBNull.Value;
                    else if (item.PropertyType.Name == "DateTime" && Convert.ToDateTime(value2) == DateTime.MinValue)
                        value2 = DBNull.Value;//防止数据库是smalldatetime类型时DateTime.MinValue溢出

                    if (value.ToString()!=value2.ToString())
                    {
                        string des = ((DataFieldAttribute)Attribute.GetCustomAttribute(item, typeof(DataFieldAttribute))).DescName;// 属性值
                        if (!string.IsNullOrEmpty(des))
                        {
                            tStr += "[" + des + "]:" + value + "修改为" + value2 + "| ";
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ErrorLog.Write("CompareObjectValue", "比较对象的值出错", ex);
            }            
            return tStr;
        }
       /// <summary>
       /// 根据对象的属性名称,获取属性的值(用于根据对象自动完成参数化sql语句的赋值操作)
       /// </summary>
       /// <param name="propertyName">属性名称(忽略大小写)</param>
       /// <param name="objectInstance">对象实例</param>
       /// <param name="objectType">对象实例类型</param>
       /// <returns>属性的值</returns>
       public static object GetPropertyValue(string propertyName, object objectInstance, Type objectType)
       {
           PropertyInfo pi = objectType.GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
           if (pi == null)
               throw new ArgumentException("自动设置参数值失败。参数化变量名称" + propertyName + "必须和对象中的属性名称一样。");
           if (!pi.CanRead)
               throw new ArgumentException("自动设置参数值失败。对象的" + propertyName + "属性没有get方式,无法读取值。");

           object value = pi.GetValue(objectInstance, null);
           if (value == null)
               value = DBNull.Value;
           else if (pi.PropertyType.Name == "DateTime" && Convert.ToDateTime(value) == DateTime.MinValue)
               value = DBNull.Value;//防止数据库是smalldatetime类型时DateTime.MinValue溢出
           return value;
       }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林少1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值