나는 종종 더 읽기 쉬운 코드를 제공하기 때문에 내 코드에서 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 #이 아무 일도하지 않고 컴파일러 오류를 던지는 이유가 궁금합니다.
EF에 대한 코드의 경우 쿼리가 SQL 호출로 변환 될 때 SQL이 널을 던지지 않기 때문에 널 전파 연산자가 실제로 필요하지 않을 가능성이 있습니다. :-)
—
xanatos
NB : EF는 현재 연산자를 지원하지 않기 때문에 쓰는
—
Matt
var q = from c in Categories join p in Products on c equals p.Category into ps from p in ps.DefaultIfEmpty() select new { Category = c, ProductName = (p?.ProductName)??"(No products)"};
대신 쓰는 것이 유용 할 것입니다 . ProductName = (p == null) ? "(No products)" : p.ProductName
?.
Foo?.Bar
일치하지 않는Foo != null ? Foo.Bar : null
때문에Foo
번역이 모든 경우에 정확하지 않을 것이다, 그래서 조건부로 두 번 널 전파 연산자를 사용하여 한 번 평가하고있다.