2012-09-13 43 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) 

但我从你的问题猜测,情况并非如此。