如何比较c#中的两个对象

本文关键字:两个 对象 何比较 比较 | 更新日期: 2023-09-27 17:50:55

我有一个方法来更新一些客户信息

public UpdateCustomerInformationResponse UpdateCustomerInformation(UpdateCustomerInformationRequest request)
{
var customer = new Customer
{
    FirstName = request.Customer
    LastName = request.LastName,
    MiddleInitial = request.MiddleInitial,
    CustomerEmail = request.CustomerEmail,
    UnitNumber = request.UnitNumber,
}

另一个对象

var fieldRequired = new FieldRequired{
FieldName = "CustomerEmail ",
IsRequired = 1
}

我想比较2个对象,以便我可以找出是否FieldName "CustomerEmail"

如何比较c#中的两个对象

兄弟,这很简单。我找到了一个使用反射和扩展方法的简单解决方案,如下所示

创建一个名为" comparetwoojects "的静态类,并将代码添加到其中。

 public static object CompareEquals(this T objectFromCompare, T objectToCompare)//Generic method
{
 if (objectFromCompare == null && objectToCompare == null)
 return true;
 else if (objectFromCompare == null && objectToCompare != null)
 return false;
 else if (objectFromCompare != null && objectToCompare == null)
 return false;
 //Gets all the properties of the class
 PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
 foreach (PropertyInfo prop in props)
 {
 object dataFromCompare = objectFromCompare.GetType().GetProperty(prop.Name).GetValue(objectFromCompare, null);
 object dataToCompare = objectToCompare.GetType().GetProperty(prop.Name).GetValue(objectToCompare, null);
 Type type = objectFromCompare.GetType().GetProperty(prop.Name).GetValue(objectToCompare, null).GetType();
 if (prop.PropertyType.IsClass && !prop.PropertyType.FullName.Contains("System.String"))
 {
 dynamic convertedFromValue = Convert.ChangeType(dataFromCompare, type);
 dynamic convertedToValue = Convert.ChangeType(dataToCompare, type);
 object result = CompareTwoObjects.CompareEquals(convertedFromValue, convertedToValue);
 bool compareResult = (bool)result;
 if (!compareResult)
 return false;
 }

 else if (!dataFromCompare.Equals(dataToCompare))
 return false;
 }
 return true;

}

这将给出两个对象是否具有相同值的结果。

用法:-Object1.CompareEquals (Object2);

如果类对象很复杂,这也可以工作。如果您发现任何问题,请回复

你的问题有点模糊。这就是你要找的吗?

if (fieldRequired.FieldName == "CustomerEmail" && fieldRequired.IsRequired == 1)
{
   CustomerEmail = request.CustomerEmail;
}

您可以实现接口IEqualtable,然后用您想要比较的数据成员设计Equals方法。您可以在下面看到这个实现的示例:

class Customer: IEquatable<Customer>
{
  public string FirstName { get; set; }
  public string LastName { get; set; }
  ...
public bool Equals(Person other)
{
  return ((FirstName == other.FirstName) &&
  (LastName == other.LastName));
}
}