C#/LINQ

[C#]LINQ 데이터가 비어있는 경우 - DefaultIfEmpty 메서드

DevStory 2022. 8. 8.

DefaultIfEmpty 메서드

C#의 Linq는 DefaultIfEmpty() 메서드를 제공합니다. DefaultIfEmpty() 메서드를 호출하는 시퀀스 또는 데이터 집합이 비어 있지 않으면 시퀀스 또는 데이터 집합이 가지고 있는 데이터가 반환되며, 데이터가 존재하지 않으면 해당 타입의 Default 값이 반환됩니다.

 

System.Linq 네임스페이스에 존재하는 DefaultIfEmpty() 메서드는 두 가지 오버로드된 버전이 존재합니다.

public static IEnumerable<TSource> DefaultIfEmpty<TSource>(
  this IEnumerable<TSource> source);

public static IEnumerable<TSource> DefaultIfEmpty<TSource>(
  this IEnumerable<TSource> source, 
  TSource defaultValue);

첫 번째 DefaultIfEmpty() 메서드는 매개변수가 존재하지 않으며, 시퀀스 또는 데이터 집합이 비어 있으면 해당 데이터 타입의 Default 값을 반환합니다.

 

두 번째 DefaultIfEmpty() 메서드는 시퀀스 또는 데이터 집합이 비어 있는 경우 Default 값을 설정할 수 있습니다. DefaultEmptyEmpty() 메서드에 인자로 전달된 값이 Default 값입니다.


예제 1. 데이터가 존재하는 경우

다음 예제는 int 타입의 List에서 DefaultIfEmpty() 메서드를 호출합니다. List에 데이터가 존재하므로 기존 값이 반환됩니다.

class Program
{
  static void Main(string[] args)
  {
    List<int> intList = new List<int>() { 10, 20, 30 };

    IEnumerable<int> result = intList.DefaultIfEmpty();

    foreach(int num in result)
    {
      Console.WriteLine(num);
    }
  }
}

[실행 결과]

10
20
30

예제 2. 데이터가 비어있는 경우

다음 예제는 int 타입의 List가 빈 값으로 할당되어 있습니다. 따라서, int 타입의 Default 값인 0이 반환됩니다.

class Program
{
  static void Main(string[] args)
  {
    List<int> intList = new List<int>() { };

    IEnumerable<int> result = intList.DefaultIfEmpty();

    foreach(int num in result)
    {
      Console.WriteLine(num);
    }
  }
}

[실행 결과]

0

다음 예제는 bool 타입의 List가 빈 값으로 할당되어 있습니다. bool 타입의 Default 값인 false가 반환됩니다.

class Program
{
  static void Main(string[] args)
  {
    List<bool> boolList = new List<bool>();

    IEnumerable<bool> result = boolList.DefaultIfEmpty();

    foreach(bool item in result)
    {
      Console.WriteLine(item);
    }
  }
}

[실행 결과]

false

예제 3. Default 값 설정

다음 예제는 int 타입의 List가 빈 값으로 할당되어 있으며, DefaultIfEmpty() 메서드에 10을 전달했습니다. 따라서, int 타입의 데이터 집합이 비어 있는 경우 10이 반환됩니다.

class Program
{
  static void Main(string[] args)
  {
    List<int> numList = new List<int>();

    IEnumerable<int> result = numList.DefaultIfEmpty(10);

    foreach (int num in result)
    {
      Console.WriteLine(num);
    }
  }
}

[실행 결과]

10

다음 예제는 bool 타입의 List가 빈 값으로 할당되어 있으며, DefaultIfEmpty() 메서드에 true를 전달했습니다. 따라서 bool 타입의 데이터 집합이 비어 있는 경우 true가 반환됩니다.

class Program
{
  static void Main(string[] args)
  {
    List<bool> boolList = new List<bool>();

    IEnumerable<bool> result = boolList.DefaultIfEmpty(true);

    foreach(bool item in result)
    {
      Console.WriteLine(item);
    }
  }
}

[실행 결과]

true
반응형

댓글