C# 比较两个物体
此代码无法进行比较。C# 比较两个物体,c#,C#,此代码无法进行比较。 如何比较C#中的两个对象?您需要在Employee类上重写Equals。示例(被盗和修改自): 然后像这样使用它: public override bool Equals(Object obj) { // Check for null values and compare run-time types. if (obj == null || GetType() != obj.GetType()) return fal
如何比较C#中的两个对象?您需要在
Employee
类上重写Equals
。示例(被盗和修改自):
然后像这样使用它:
public override bool Equals(Object obj)
{
// Check for null values and compare run-time types.
if (obj == null || GetType() != obj.GetType())
return false;
Employee e = (Employee)obj;
return (this.Name == e.Name) && (this.Age == e.Age);
}
注意:如果您重写了
Equals()
,您还应该重写GetHashCode()
,而不重写Equals方法,只会发生引用比较。您希望执行值比较
重写Employee类中的方法,如下所示:
if (emp1.Equals(emp2))
{
// ...
public override bool Equals(Object emp)
{
// If parameter is null return false.
if (emp == null)
{
return false;
}
// If parameter cannot be cast to Point return false.
Employee e = emp as Employee;
if ((System.Object)e == null)
{
return false;
}
// Return true if the fields match
return (Name == emp.Name) && (Age == emp.Age);
}
然后像这样比较对象:
if (emp1.Equals(emp2))
{
// ...
public override bool Equals(Object emp)
{
// If parameter is null return false.
if (emp == null)
{
return false;
}
// If parameter cannot be cast to Point return false.
Employee e = emp as Employee;
if ((System.Object)e == null)
{
return false;
}
// Return true if the fields match
return (Name == emp.Name) && (Age == emp.Age);
}
或使用比较运算符:
if(emp1.Equals(emp2))
{ ... }
有关MSDN的更多详细信息,请单击此处:查看链接以获取Object.Equals的说明
如果您让类保持原样,那么所做的比较就是引用比较。这不是您想要的,您想要基于您的属性测试相等性
如果重写Employee类中的方法Equals(object),则可以在那里实现自定义equal测试。如Botz3000所述,请参阅如何覆盖此方法并实现自定义测试。您尝试了什么?您是否知道需要覆盖
Equals
和GetHashCode
?有关GetHashCode()的更多信息,请参见@Maciej如何使用hashcode进行比较?真的有可能吗?你提供的链接中的一些评论说它不可靠。你无法使用GetHashCode进行比较,但正如Jon所说,你需要重写GetHashCode和Equals以确保功能正确。如果它对你有效,不要忘记将其标记为已接受…Object.Equals(e1,e2)最终会执行e1.Equals(e2)如果指针不为null且不指向同一个对象。@Maarten是的,已经考虑过了,但我想先在reflector中检查一下。Equals方法有一个object类型的参数,而不是Employee类型的参数。