1

可以说我有以下课程

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

如果我有这个类的两个实例,什么是比较对象的快速方法,但同时允许我检查一个属性是否是其他东西,假设它与其他对象属性不匹配。目前我只是在做大量的 if 语句,但这感觉像是一种糟糕的做事方式。

我想要的功能示例;如果第一个实例 prop1 与第二个实例的 prop1 不匹配,我仍然可以检查第一个实例的 prop1 是否为 10 或其他值。

是的,这个例子非常粗略,但实际代码非常庞大,所以我无法将其发布在这里。

谢谢

编辑

我应该注意,我不能编辑类测试,因为我不拥有它。

4

2 回答 2

2

您可以构建自己的比较器(未经测试的代码)

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

然后简单地调用:

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

var equal = new TestComparer( ).Equals( a, b );
于 2012-09-13T15:38:11.153 回答
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)

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

于 2012-09-13T15:38:01.727 回答