如何比较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"
兄弟,这很简单。我找到了一个使用反射和扩展方法的简单解决方案,如下所示
创建一个名为" 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));
}
}