나는 다음과 같은 string
목록을 가지고 :?? 널 개체에 대한 연산자
string Email = Emails[0] ?? "";
은 위의 코드는 예외가 발생합니다 :
그것을 어떤 값이 있는지, 또는 빈 문자열을 반환하려고List<string> Emails = new List<string>();
인덱스가 범위를 벗어났습니다. 음수가 아니며 컬렉션의 크기가 보다 작아야합니다. 매개 변수 이름 : 인덱스
그러나 간단한 if
문에 ??
연산자를 변경, 그것을 잘 작동합니다 : 여기 무엇을 놓치고
if (Emails.Count > 0)
Email = Emails[0];
else
Email = "";
? 목록이 비어 있으면 Emails[0]
은 null
이 아니어야합니까?
감사합니다. 목록이 비어
string Email = Emails.FirstOrDefault() ?? "";
경우, Emails[0]
가 null는 아니고, 그냥 존재하지 않습니다
전자 메일 [0]은 목록의 첫 번째 항목에 액세스하려고합니다. 즉, 예외가 throw됩니다. – Fabio
여기의 두 코드는 동일하지 않습니다.두 번째 부분에서는'Emails [0]'배열 요소에 접근하기 전에'Emails.Count> 0' 배열의 범위를 정확히 검사하고 있습니다. 첫 번째 부분에서 인덱스 0의 요소가 null 병합 연산자를 사용하여 null인지 정확히 확인하지만 배열 경계를 올바르게 검사하지는 않습니다. 예외는 예외입니다. –
목록이 null이 아니므로'?? '을 사용하는 것이 중요하지 않습니다. 첫 번째 항목이 null이 아니거나 첫 번째 항목이 없습니다. 'FirstOrDefault' 나 2가 명시 적 체크를 사용하면됩니다. 첫 번째 항목에 신경 쓰면 'Queue <>'와 같은 더 적절한 컨테이너로 전환하는 것이 더 좋지 않을까요? –