단락 것을 테스트합니다. 적어도 내가 얻는 새로운 표현이 작동하도록.어떻게 표현 나는 다음과 같은 서명이 확장 방법이
이제는 메서드가 and
의 단락 버전을 사용하는지 확인하는 또 다른 테스트 케이스를 작성하려고합니다. 어떻게 이걸 할 수 있는지 어떤 단서?
는 난 그냥 같은 것을 할 수 있다고 생각 :
[Test]
public void And_PredicatesAreShortCircuited()
{
var predicateNotUsed = true;
Expression<Func<int, bool>> a = x => false;
Expression<Func<int, bool>> b = x =>
{
predicateNotUsed = false;
return true;
};
var foo = new[] { 1, 2, 3, 4, 5, 6, 7 }
.Where(a.And(b).Compile())
.ToArray();
Assert.That(predicateNotUsed);
}
을하지만 문장 몸 "람다 표현식으로 변환 할 수 없다는 b
동안 그 전체 문장의 몸에서 구불 구불 한 거대한 붉은 얻을 표현 트리 ". 그래서 ... 어떤 선택권이라도? 아니면 쓸 수없는 시험입니까?
거기에는 혼란 스러움과 거짓이 있습니다. –
Wops. 나는 지금 당장 그것을 얻을 수 있었다고 생각합니다. : p – Svish
오류에 대한 간단한 설명. 단일 라인 λ 식 또는 식 lambdas ("a"case)와 식 트리 사이의 암시적인 변환이 있지만 여러 줄의 람다 식 또는 문 람다 ("b"대)와 식 트리 간의 암시 적 변환은 없습니다 . 자세한 내용은 http://blogs.msdn.com/csharpfaq/archive/2009/09/14/generating-dynamic-methods-with-expression-trees-in-visual-studio-2010.aspx –