2010-12-14 2 views
0

私が理解しているように、同じパラメータで同じコードを同じ順序で宣言する限り、lambdaは等しいはずです。ラムダ値オブジェクトはありますか?

しかし、GetHashCodeメソッドの簡単なテストは失敗します。

$

private class LambdaTest 
    { 
     private bool x; 

     public Expression<Func<object, bool>> Predicate 
     { 
      get { return o => x; } 
     } 

     public LambdaTest(bool x) 
     { 
      this.x= x; 
     } 

     public override int GetHashCode() 
     { 
      return Predicate.GetHashCode(); 
     } 

    } 

$

テスト $

[Test] 
    public void hashonlambdas() 
    { 
     NullSpecification n1 = new NullSpecification(true); 
     NullSpecification n2 = new NullSpecification(true); 

     Assert.AreEqual(n1.GetHashCode(), n2.GetHashCode()); 
    } 

イムは、何か間違ったことをやってまたは多分ラムダ値が、私はラムダが代理人であるとDelgateが参照型であるので、それはだと思う

+1

LambdaTestはNullSpecificationにどのように関連していますか? –

+0

ラムダ式がデリゲートだと思った。それにかかわらず、それはあなたがテストすべき平等または同じ目的ですか? – Swanny

+0

サンプルコードは、私の実際のコードの単なる抽出です(私はそれを非常に明確にしないいくつかの部分を削除すると思います)。しかし、フォーカスは、Predicateプロパティは基本的に両方のオブジェクトで同じであるため、Predicate.GetHashCode()はEqualsの場合は同じものを返す必要があります。 – jorge

答えて

0

オブジェクトでない場合は

あなたは私を伝えることができます。 同じタイプの2つの代理人を持つことはできますが、別個の呼び出しリストを使用することはできますが、それらは同じではありません。ラムダの場合、たとえ彼らが同じ仕事をしても、あなたが1つを呼び出すと、あなたは他の人を呼んでいません。

関連する問題