무엇을 사용 하는가?First
LINQ의 연산자를 사용하면FirstOrDefault
연산자 대신?
var q = results.First(); // Error if empty
특정 질문에 직접 응답하려면 (왜 사용합니까?First
언제든지 사용할 수 있다면FirstOrDefault
), 사용할 수없는 경우가 있습니다.FirstOrDefault
, 그것은 정보를 잃기 때문에! "기본값"은 소스 목록의 유효한 요소 유형입니다. 열거 형의 첫 번째 요소를 null / default로 구별 할 수있는 방법과 사용하지 않는 한 목록에 요소가 없도록 구별 할 방법이 없습니다.First
또는 처음 있는지 확인하십시오.Any
요소. 이중 열거 형이 필요합니다.
특히 value-typed enumerables의 경우에는 특히 그렇습니다.int[]
.default(int)
~이다.0
이는 배열의 유효한 값이기도합니다.
일반적으로 두 가지 방법은 서로 다른 논리 흐름을 나타냅니다.First
요소가 없으면 "예외적"(오류)하고 응용 프로그램에서 대역 외를 처리하려고 할 때 사용됩니다. 이 시나리오에서는 적어도 하나의 요소가 있어야합니다.FirstOrDefault
빈 집합에 null을 반환하므로 반환 값을 사용하여 추가 처리가 필요합니다. 이것은 비슷한 로직입니다.Parse
대TryParse
에 관한 방법들int
/double
/기타. 사실, 당신의 질문은 어떤면에서 예외를 사용하는 이유에 대한보다 일반적인 질문으로 이어집니다.
이후First
예외를 던지면 예외가 제공하는 모든 코드 재사용 기회를 얻을 수 있습니다. 예를 들어 다음과 같이 할 수 있습니다.
try
{
x = arr1.First();
y = arr2.First();
z = arr3.First();
}
catch
{
throw new ArgumentException();
}
명시 적으로 예외를 발생시키지 않고 예외를 발생 시키려면null
검사.
그것은 같은 토론이다.Int32.Parse
대Int32.TryParse
. 전자는 실패의 경우 예외를 던지고 후자는 거짓을 반환하고 프로그램은 원활하게 계속됩니다 ...
First
(Error-if-empty)는 다음보다 덜 이상적이라고 생각됩니다.FirstOrDefault
. - user166390