C# First vs FirstOrDefault 차이가 무엇인가요? (Linq Enumerable)

First vs FirstOrDefault

First vs FirstOrDefault

C# Linq Enumerable에서 First와 FirstOrDefault의 차이를 알아봅시다. 예제 소스는 다음과 같습니다.

using (Process process = Process.GetProcesses().Where(x => x.MainWindowTitle.EndsWith("메모장")).First())
{
    if (process != null)
        MessageBox.Show($"메모장 핸들 : {process.Handle.ToString()}");
}

using (Process process = Process.GetProcesses().Where(x => x.MainWindowTitle.EndsWith("메모장")).FirstOrDefault())
{
    if (process != null)
        MessageBox.Show($"메모장 핸들 : {process.Handle.ToString()}");
}

First

First는 시퀀스에서 첫 번째 요소를 반환합니다. 소스 시퀀스가 없는 경우에는 예외가 발생하는 특징이 있습니다.

예외 => 시퀀스에 요소가 없습니다(System.InvalidOperationException)

시퀀스에 요소의 존재가 보장되는 경우에 사용하기 좋으며, 요소 존재 여부가 불확실하다면 예외처리와 함께 사용해야 합니다.

FirstOrDefault

FirstOrDefault는 시퀀스의 첫 번째 요소를 반환하거나, 시퀀스에 요소가 없는 경우 기본값을 반환합니다. 해당 예시에서는 Process 객체의 기본값인 null을 반환합니다.

NullReferenceException

null 여부를 확인하지 않으면 null 참조 예외가 발생할 것입니다.

(처리되지 않은 'System.NullReferenceException' 형식의 예외가 발생했습니다. 추가 정보: 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.)

시퀀스에 요소의 존재여부가 불분명할 때 FirstOrDefault의 사용을 검토하는 것이 낫습니다.

댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗