반응형
람다 식에서 null 전파 연산자를 사용할 수없는 이유는 무엇입니까?
나는 더 읽기 쉬운 코드를 제공하기 때문에 종종 내 코드에서 null 전파 연산자를 사용합니다. 특히 긴 쿼리에서는 사용되는 모든 단일 클래스를 null 검사 할 필요가 없습니다.
다음 코드는 람다에서 null 전파 연산자를 사용할 수 없다는 컴파일 오류를 발생시킵니다.
var cnt = humans.AsQueryable().Count(a => a.House?[0].Price == 5000);
오류 :
오류 CS8072 식 트리 람다에 null 전파 연산자가 포함될 수 없습니다.
C #은 정말로 다른 것을 할 수 없다면 위의 코드를 다음 코드로 쉽게 변환 할 수 있습니다!
var cnt = humans.AsQueryable().Count(a => a.House != null && a.House[0].Price == 5000);
왜 C #이 아무 일도하지 않고 컴파일러 오류를 던지는 이유가 궁금합니다.
식 트리 람다 (대리자 람다와 달리)는 아직 null 전파를 지원하지 않는 기존 LINQ 공급자에 의해 해석되기 때문에 복잡합니다.
조건식으로 변환하는 것이 항상 정확한 것은 아닙니다 ?.
. 예를 들어 단일 평가 만있는 동안 여러 평가가 있기 때문입니다.
customer.Where(a => c.Increment()?.Name) // Written by the user
customer.Where(a => c.Increment() == null ? null : c.Increment().Name) // Incorrectly interpreted by an old LINQ provider
3 가지 솔루션이 제공되는 CodePlex 에 대한 관련 토론에서 더 깊이 들어갈 수 있습니다 : NullPropagationExpression
, ConditionalExpression
& a hybrid
반응형
'program tip' 카테고리의 다른 글
WCF 제한 시간 예외 세부 조사 (0) | 2020.08.29 |
---|---|
Heroku“psql : FATAL : 나머지 연결 슬롯은 비 복제 수퍼 유저 연결 용으로 예약되어 있습니다.” (0) | 2020.08.29 |
Docker 컨테이너를 중지하고 제거하는 단일 명령 (0) | 2020.08.28 |
ASP.NET에서 HTML / 이메일 템플릿을 설정할 수 있습니까? (0) | 2020.08.28 |
널이 아닌 종료 문자열과 함께 printf 사용 (0) | 2020.08.28 |