2012-07-27 192 views
4
Employee emp1 = new Employee {Name = "Swapnil",Age = 27 }; 
      Employee emp2 = new Employee { Name = "Swapnil", Age = 27 }; 
      if (object.Equals(emp1, emp2)) 
      { 

      } 
      else 
      { 
      } 

此代碼無法進行比較。 我如何比較C#中的兩個對象?比較兩個對象

+2

你有什麼嘗試?你知道你需要重寫'Equals'和'GetHashCode'嗎? – 2012-07-27 12:45:17

+0

GetHashCode()上的更多信息可以在這裏找到http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx – Maciej 2012-07-27 12:46:10

+0

@Maciej如何比較使用哈希碼?真的有可能嗎?您提供的鏈接中的某些註釋表示它不可靠 – shajivk 2012-07-27 13:03:50

回答

2

如果不重寫Equals方法,只會發生參考比較。你想執行一個值比較。

覆蓋的方法在Employee類,像這樣:

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)) 
{ ... } 

或與比較操作:

if(emp1 == emp2) 
{ ... } 

更多細節在MSDN這裏:http://msdn.microsoft.com/en-us/library/ms173147(v=vs.80).aspx

+0

Equals-method有一個** object **類型的參數,而不是** Employee **。 – Maarten 2012-07-27 12:52:23

0

您需要在Employee課上覆蓋Equals。示例(被盜和MSDN修改):

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); 
    } 

,然後用它這樣的:

if (emp1.Equals(emp2)) 
{ 
    // ... 

注:如果您覆蓋Equals(),你也應該重寫GetHashCode()

+0

這是一個小燈... – 2012-07-27 12:44:52

+0

Object.Equals(e1,e2)最終做e1.Equals(e2)如果指針不爲null並且做不指向同一個對象。 – Maarten 2012-07-27 12:48:25

+0

@Maarten是啊,已經這麼想過了,但是我想我會先在反射器中檢查它。 – Botz3000 2012-07-27 12:50:31

0

檢查this鏈接瞭解Object.Equals的說明。

如果你離開你的班級,那麼所做的比較是一個參考比較。這不是你想要的,你想根據你的屬性測試平等。

如果您在Employee類中重寫方法Equals(object),那麼您可以在那裏實現您的自定義平等測試。請參閱here(如Botz3000已提供),瞭解如何覆蓋此方法並實施自定義測試。