C#/LINQ

[C#]LINQ 특정 타입 추출하는 방법 - OfType 메서드

DevStory 2022. 7. 12.

LINQ의 OfType 메서드

LINQ의 OfType() 메서드는 특정 타입의 데이터를 추출하기 위해 사용되는 메서드입니다. 예를 들어 List의 타입이 Object인 경우 string, int, boolean 등.. 모든 타입의 값을 가질 수 있습니다. 해당 List 객체에서 string 타입의 값만 추출하고 싶은 경우 OfType() 메서드를 사용할 수 있습니다.

 

다음 예제는 OfType() 메서드를 사용하여 string 타입의 값을 추출하는 방법입니다.

class Program
{
  static void Main(string[] args)
  {
    // Object 타입인 List 객체는 모든 타입의 값을 가질 수 있습니다.
    List<Object> allTypeList = new List<object>()
    {
      "C Sharp", 100, true, "Java", 200, false, "React"
    };

    // OfType 메서드에 추출하려는 타입을 작성합니다.
    List<string> strList = allTypeList.OfType<string>().ToList();

    foreach (string strValue in strList)
      Console.WriteLine(strValue);
  }
}

[실행 결과]

C Sharp
Java
React

예제 1. is 연산자 사용

OfType() 메서드는 System.Linq 네임스페이스에서 지원하지만 질의 구문에서 사용할 수 없습니다. 대신 is 연산자를 사용하여 특정 타입에 해당하는 값을 추출할 수 있습니다.

 

다음 예제는 질의 구문과 메서드 구문에서 is 연산자를 사용하여 string 타입의 값을 추출합니다.

class Program
{
  static void Main(string[] args)
  {
    List<Object> allTypeList = new List<object>()
    {
      "C Sharp", 100, true, "Java", 200, false, "React"
    };

    var linqQueryResult = (from   item in allTypeList
                           where  item is string
                           select item).ToList();

    var linqMethodResult = allTypeList.OfType<string>();


    Console.WriteLine("질의 구문");
    foreach (string strValue in linqQueryResult)
      Console.WriteLine(strValue);

    Console.WriteLine("\n메서드 구문");
    foreach (string strValue in linqMethodResult)
      Console.WriteLine(strValue);
  }
}

[실행 결과]

질의 구문
C Sharp
Java
React

메서드 구문
C Sharp
Java
React

예제 2. 질의 구문과 메서드 구문

OfType() 메서드는 질의 구문에서 직접적으로 사용할 수 없지만 특정 타입에 해당하는 값을 추출한 결과를 가지고 질의 구문을 작성하는 것은 가능합니다.

 

다음 예제는 OfType() 메서드를 사용하여 int 타입의 값을 추출한 결과를 질의 구문과 메서드 구문에서 사용합니다.

class Program
{
  static void Main(string[] args)
  {
    List<Object> allTypeList = new List<object>()
    {
      "C Sharp", 100, true, "Java", 200, false, "React"
    };

    var linqQueryResult = (from   item in allTypeList.OfType<int>()
                           where  item == 100
                           select item).ToList();

    var linqMethodResult = allTypeList.OfType<int>()
        .Where(item => item == 100)
        .Select(item => item);

    Console.WriteLine("질의 구문");
    foreach (int strValue in linqQueryResult)
      Console.WriteLine(strValue);

    Console.WriteLine("\n메서드 구문");
    foreach (int strValue in linqMethodResult)
      Console.WriteLine(strValue);
  }
}

[실행 결과]

질의 구문
100

메서드 구문
100
반응형

댓글