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类型的参数。