Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# SingleOrDefault() 메서드 완벽 정리 – 사용법과 예제

C# SingleOrDefault() 메서드란?

SingleOrDefault() 메서드는 LINQ에서 제공하는 메서드로, 시퀀스(컬렉션)에서 특정 단일 요소를 반환합니다. 만약 시퀀스에 해당 요소가 존재하지 않으면, 예외를 발생시키는 대신 해당 타입의 기본값(default)을 반환합니다. 예를 들어 참조 타입인 경우 null, 숫자 타입인 경우 0이 반환됩니다.

참고로 Single() 메서드와 달리, SingleOrDefault()는 결과가 비어 있어도 예외를 던지지 않기 때문에 안전하게 값을 조회할 때 유용합니다.

기본 동작 이해하기

다음과 같이 두 개의 문자열 배열이 있다고 가정해 보겠습니다.

string[] str1 = { "one" };  // 요소가 하나 있는 배열
string[] str2 = { };         // 빈 배열

첫 번째 배열은 단일 요소를 포함하고 있어 Single()로 바로 조회할 수 있으며, 두 번째 배열은 비어 있기 때문에 SingleOrDefault()를 사용해 기본값을 확인할 수 있습니다.

str2.AsQueryable().SingleOrDefault();

예제 코드

아래는 SingleOrDefault() 메서드의 실제 사용 예제입니다.

using System;
using System.Linq;
using System.Collections.Generic;

public class Demo {
    public static void Main() {
        string[] str1 = { "one" };
        string[] str2 = { };

        // 요소가 하나뿐인 배열은 Single()로 조회 가능
        string res1 = str1.AsQueryable().Single();
        Console.WriteLine("String found: " + res1);

        // 빈 배열은 SingleOrDefault()로 기본값 반환
        string res2 = str2.AsQueryable().SingleOrDefault();
        Console.WriteLine(String.IsNullOrEmpty(res2) ? "String not found" : res2);
    }
}

실행 결과

String found: one
String not found

정리

SingleOrDefault()는 시퀀스에 일치하는 요소가 하나만 있을 경우 그 요소를 반환하고, 요소가 없으면 기본값을 반환합니다. 다만 주의할 점은, 시퀀스에 두 개 이상의 요소가 존재하면 InvalidOperationException 예외가 발생한다는 것입니다. 따라서 컬렉션에서 조건에 맞는 값이 최대 하나만 존재한다고 확신할 수 있을 때 이 메서드를 사용하는 것이 좋습니다.