2010-12-14 5 views
0

나는 2 개의 람다가 동일한 매개 변수를 사용하여 같은 순서로 동일한 코드를 선언하는 한 동일해야 함을 이해합니다.람다 값 객체입니까?

그러나 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()); 
    } 

임 뭔가를하고있는 경우

당신은 잘못 또는 어쩌면 람다는 값이 아닌 내가 람다 대리자가와 위양이 참조 형식이기 때문에 그것은 생각

+1

LambdaTest는 NullSpecification과 어떤 관련이 있습니까? –

+0

람다식이 대리자라고 생각했습니다. 그럼에도 불구하고, 당신이 테스트해야 할 평등 또는 동일한 대상입니까? – Swanny

+0

샘플 코드는 실제 코드를 추출한 것일뿐입니다 (명확하지 않은 부분을 제거한다고 생각합니다). 그러나 Predicate 속성은 기본적으로 두 개체에서 동일하므로 Predicate.GetHashCode()는 Equals 인 경우 동일한 값을 반환해야합니다. – jorge

답변

0

객체입니다 말해 수 있습니다. 동일한 유형이지만 별개의 호출 목록을 가진 두 명의 대리인을 가질 수 있으며 이들은 동일하지 않습니다. 람다의 경우, 비록 그들이 동일한 일을하더라도, 당신이 하나를 부르면, 당신은 다른 것을 부르지 않습니다.