2012-09-13 84 views
1

可以說我有以下類簡單的方法來比較兩個對象?

public class Test 
{ 
    public int prop1 { get;set; } 
    public string prop2 { get;set; } 
    public Type prop3 { get;set; } 
} 

如果我有這個類的兩個實例,什麼是一個快速的方法來比較的對象,但在同一時間讓我去檢查,如果一個屬性是另一回事假設它與其他對象屬性不匹配。目前,我只是在做很多if語句,但這感覺是一種糟糕的做事方式。

我想要的功能的一個例子;如果第一個實例prop1與第二個實例的prop1不匹配,我仍然可以檢查第一個實例中的prop1是否是10。

是的這個例子是非常粗略的,但實際的代碼是巨大的,所以我不能在這裏發佈它。

感謝

編輯

我應該注意到,因爲我不擁有它,我不能編輯類測試。

+0

可能是這個鏈接將幫助.. http://stackoverflow.com /問題/ 411232 /比較兩對象 – Krishna

回答

2

你可以建立自己的Comparer(未測試的代碼)

public class TestComparer : IEqualityComparer<Test> 
{ 
    public bool Equals(Test x, Test y) 
    { 
     if(ReferenceEquals(x, y)) 
      return true; 

     if(ReferenceEquals(x, null) || ReferenceEquals(y, null)) 
      return false; 

     return x.prop1 == y.prop1 && 
       x.prop2 == y.prop2 && 
       x.prop3 == y.prop3; 
    } 

    public int GetHashCode(Test entry) 
    { 
     unchecked 
     { 
      int result = 37; 

      result *= 397; 
      result += entry.prop1.ToString().GetHashCode(); 
      result *= 397; 
      result += entry.prop2.GetHashCode(); 
      result *= 397; 
      result += entry.prop3.ToString().GetHashCode(); 

      return result; 
     } 
    } 
} 

,然後只需撥打:使用IEquatable接口

Test a = new Test(); 
Test b = new Test(); 

var equal = new TestComparer().Equals(a, b); 
0

不能編輯類本身我會說你的選擇是相當有限的。你總是可以在某個地方抽象出代碼,然後製作一個比較函數,該函數需要2個對象並返回一個布爾值。這種情況發生

public static bool Compare(Test test1, Test test2) 
{ 
    //May need to add some null checks 
    return (test1.prop1 == test2.prop1) 
     && (test1.prop2 == test2.prop2); 
    //...etc 
} 

除非你真正做到有相同的對象,而不是僅僅2對象均具有相同的屬性值,在這種情況下,你可以簡單地做......

if (test1 == test2) 

但我從你的問題猜測,情況並非如此。