1

次のクラスがあるとしましょう

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

このクラスのインスタンスが 2 つある場合、オブジェクトを比較するための高速なアプローチであると同時に、他のオブジェクトのプロパティと一致しないと仮定して、プロパティが他のものであるかどうかを確認できます。現在、私は大量の if ステートメントを実行していますが、これは悪い方法のように感じます。

私が欲しい機能の例; 最初のインスタンスの prop1 が 2 番目のインスタンスの prop1 と一致しなかった場合でも、最初のインスタンスの prop1 が 10 か何かであるかどうかを確認できます。

はい、この例は非常に粗雑ですが、実際のコードは巨大であるため、ここに投稿することはできません。

ありがとう

編集

私はそれを所有していないので、クラス Test を編集できないことに注意してください。

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 つのオブジェクトを取り、bool を返す比較関数を作成することができます。

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 に答える