C#/LINQ

[C#]LINQ 특정 인덱스의 값 가져오기 - ElementAt, ElementAtOrDefault 메서드

DevStory 2022. 8. 7.

특정 인덱스의 값 가져오기

C#의 Linq는 데이터 집합에서 특정 인덱스의 값을 가져오는 기능을 제공합니다.

- ElementAt() 메서드

- ElementAtOrDefault() 메서드

 

이번 포스팅은 두 가지 함수 사용 방법을 소개합니다.


ElementAt 메서드

C#의 Linq에서 제공하는 ElementAt() 메서드는 데이터 집합에서 특정 인덱스의 값을 반환합니다. 

public static TSource ElementAt<TSource>(this IEnumerable<TSource> source, int index);

ElementAt() 메서드는 System.Linq의 Enumerable 클래스에 정의되어 있으며, IEnumerable 인터페이스의 확장 메서드입니다.

 

ElementAt() 메서드를 호출하는 데이터 집합이 null로 초기화되거나 ElementAt() 메서드의 인자로 전달된 인덱스 값이 데이터 집합의 범위를 벗어나면 런타임 에러가 발생합니다.


예제 1. 특정 인덱스의 값

다음 예제는 int타입의 List에서 ElementAt() 메서드를 사용하여 3번째 인덱스에 위치한 값을 가져옵니다.

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

    int getElement = intList.ElementAt(3);

    Console.WriteLine($"3번째 인덱스의 값: {getElement}");
  }
}

[실행 결과]

3번째 인덱스의 값: 40

예제 2. 주의사항

데이터 집합을 null로 초기화하면 ArgumentNullException 예외가 발생합니다.

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

    int getElement = intList.ElementAt(3);
  }
}

[에러 내용]

[C#]LINQ 특정 인덱스의 값 가져오기 - ElementAt, ElementAtOrDefault 메서드 - 특정 인덱스의 값 가져오기 - ElementAt 메서드 - 예제 2. 주의사항


ElementAt() 메서드의 인자에 전달된 값이 데이터 집합의 범위를 벗어나는 경우에는 ArgumentOutOfRangeException 예외가 발생합니다.

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

    int getElement = intList.ElementAt(10);
  }
}

[에러 내용]

[C#]LINQ 특정 인덱스의 값 가져오기 - ElementAt, ElementAtOrDefault 메서드 - 특정 인덱스의 값 가져오기 - ElementAt 메서드 - 예제 2. 주의사항


다음 예제처럼 데이터 집합이 빈 값인 경우에도 ArgumentOutOfRangeException 예외가 발생합니다.

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

    int getElement = intList.ElementAt(10);
  }
}

[에러 내용]

[C#]LINQ 특정 인덱스의 값 가져오기 - ElementAt, ElementAtOrDefault 메서드 - 특정 인덱스의 값 가져오기 - ElementAt 메서드 - 예제 2. 주의사항


ElementAtOrDefault 메서드

ElementAtOrDefault() 메서드는 ElementAt() 메서드와 동일한 작업을 수행하지만, 한 가지 차이점이 있습니다. 데이터 집합이 빈 값이거나 ElementAtOrDefault() 메서드의 인자로 전달된 값이 데이터 집합의 범위를 벗어나더라도 예외가 발생하지 않습니다.

 

데이터 집합이 빈 값 또는 ElementAtOrDefault() 메서드의 인자로 전달된 값이 데이터 집합의 범위를 벗어나는 경우 데이터 집합 타입의 Default 값을 반환합니다.

public static TSource ElementAtOrDefault<TSource>(
  this IEnumerable<TSource> source, 
  int index);

ElementAt() 메서드와 마찬가지로 System.Linq의 Enumerable 클래스에 정의되어있으며, IEnumerable 인터페이스의 확장 메서드입니다.


예제 1. 특정 인덱스의 값

다음 예제는 int타입의 List에서 ElementAtOrDefault() 메서드를 사용하여 3번째 인덱스에 위치한 값을 가져옵니다.

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

    int getElement = intList.ElementAtOrDefault(3);

    Console.WriteLine($"3번째 인덱스의 값: {getElement}");
  }
}

[실행 결과]

3번째 인덱스의 값: 40

예제 2. 범위를 벗어남

위에서 설명했듯이 ElementAtOrDefault() 메서드의 인자로 전달된 값이 데이터 집합의 범위를 벗어나더라도 에러가 발생하지 않습니다.

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

    int getElement = intList.ElementAtOrDefault(10);

    Console.WriteLine($"10번째 인덱스의 값: {getElement}");
  }
}

[실행 결과]

10번째 인덱스의 값: 0

int 타입의 Default 값인 0이 반환되었습니다.


예제 3. 주의사항

빈 값과 null은 엄연히 다른 개념입니다. 따라서, 데이터 집합이 null인 경우에는 ArgumentNullException 예외가 발생합니다.

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

    int getElement = intList.ElementAtOrDefault(10);
  }
}

[에러 내용]

[C#]LINQ 특정 인덱스의 값 가져오기 - ElementAt, ElementAtOrDefault 메서드 - 특정 인덱스의 값 가져오기 - ElementAtOrDefault 메서드 - 예제 3. 주의사항

반응형

댓글