2016-07-20 5 views
2

C# 6.0에 소개 된 Null 조건부 연산자에 대해 읽었지만 완전히 이해하지 못했습니다. 고객이 한 번만 평가되는 것을 제외하고null 조건부 연산자 만 한 번만 계산합니다.

int? first = (customers != null) ? customers[0].Orders.Count() : null; 

: https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6

int? first = customers?[0].Orders.Count(); 

이 예에서

은 본질적으로 동일합니다.

두 번 평가 한 '한 번 평가 된'구절을 더 자세히 설명 할 수 있습니까?

답변

1

여기에 변수 customers 한 번만 "감동"귀하의 첫 번째 문

var temp = customers; 
int? first; 
if(temp != null) 
{ 
    first = temp[0].Orders.Count(); 
} 
else 
{ 
    first = null; 
} 

에 더 나은 상당이다. customersget에서 일부 동작을 수행하거나 함수 인 속성 일 때 더 중요합니다. 당신의 2 예에서

private int accessCount = 0; 
private Customers[] _customers; 
private Customers[] customers 
{ 
    get 
    { 
     accessCount++; 
     return _customers; 
    } 
    set 
    { 
     _customers = value; 
    } 
} 

customers 속성이 될 것 "감동"두 번, 한 번 accessCount2의 값을주는 인덱서 한 번 널 체크합니다.

+0

이것은 정확히 내가 필요한 것입니다. 고맙습니다 –

1

즉, 프로그램에서 customers 번만 액세스합니다. 두 번째 예에서 customers은 널 확인을 위해 두 번 액세스하고 두 번째로 Orders 속성 (null이 아닌 경우)에 액세스합니다.

새 기능에서는 customers에 한 번만 액세스하고 null이 아닌 경우 다시 액세스하지 않습니다 (예 : 필드가 수정되면 null이 될 수 없음). 이미 액세스 한 객체가 사용됩니다.