2011-01-29 3 views
3

가능한 중복 :
Lambda Expression: == vs. .Equals()LINQ의 동등한 키워드를 사용

안녕,

나는 키워드가 변수 및 기타 물건을 비교하는 같음을 많이 사용합니다. 런타임에

하지만

wines = wines.Where(d => d.Region.Equals(paramRegion)).ToList(); 

반환 오류가 데이터 영역에 내가

wines = wines.Where(d => d.Region == paramRegion).ToList(); 

오류를 제거하는 코드를 사용했다

NULL 인 경우.

여기 왜 오류가 발생합니까?

감사합니다.

+1

가'이런 맥락에서 Equals' 키워드 아니다 - 그냥하는 방법입니다. ** ** LINQ 문맥 상'equals' 키워드가 있지만'join '을 할 때만 있습니다. –

+0

이 질문에 답을하기 전에 : http://stackoverflow.com/questions/2273600/lambda-expression-vs-equals – Victor

답변

3

null 객체 참조가있는 인스턴스 메소드를 호출 할 수 없습니다. 인스턴스 메서드를 호출하기 전에 Region이 null이 아닌지 확인해야합니다.

wines = wines.Where(d => d.Region != null && d.Region.Equals(paramRegion)).ToList(); 

d.Region == paramRegion은 (대부분) object.Equals(d.Region, paramRegion)로 확대하고 그 고정 방법은 파라미터가 null 여부() 메소드를 호출하기 전에 같음 있는지 확인 않는다.

paramRegion이 null 일 수 없다는 것을 알고있는 경우 다른 순서로 조건을 작성할 수도 있습니다.

Debug.Assert(paramRegion != null); 
wines = wines.Where(d => paramRegion.Equals(d.Region)).ToList(); 
+0

와인 = wines.Where (D => object.Equals (d.Region, paramRegion)) .ToList(); – Doug

3

은 기본적으로 다음

d.Region == null 

어떤 메서드 호출하면, 여기가 초기화되지 이후 예외가 발생합니다 같음 (...) 그에을합니다.

0

사용을 사용할 수 있습니다

paramRegion.Equals(d.Region)