Enumerable.OfType<T>()
- 시퀀스 내의 <T>형식과 일치하는 요소만 반환, 필터 기능이라고 보면됨
- 일치하지 않는 요소가 있어도 예외를 발생 하지 않음
object[] arr = { 1, "2", 3, "4", 5 };
var ofTypeArr = arr.OfType<int>();
Console.WriteLine(string.Join(", ", ofTypeArr)); // 1, 3, 5
int와 string 속성이 섞인 배열에서 int타입만 필터링 되었다.
Enumerable.Cast<T>()
- 시퀀스 내의 모든 요소의 형식을 <T>타입으로 변환 시도
- 만약 형 변환이 되지 않는 요소가 있을 경우 InvalidCastException 예외 발생
object[] arr = { 1, "2", 3, "4", 5 };
var castArr = arr.Cast<int>();
Console.WriteLine(string.Join(", ", castArr)); // System.InvalidCastException: 지정한 캐스트가 잘못되었습니다.
int로 cast를 시도했지만 "2" 와 "4"가 string 타입임으로 오류가 발생.
- Cast<T> 메서드를 사용하면 제너릭이 아닌 컬렉션에서 표준 쿼리 연산자(Linq)를 호출할 수 있게 만든다.
System.Collections.ArrayList arrayList = new System.Collections.ArrayList();
arrayList.Add("string3");
arrayList.Add("string2");
arrayList.Add("string1");
List<string> lst = arrayList.Cast<string>().OrderBy(o => o).ToList();
Console.WriteLine(string.Join(", ", lst)); // string1, string2, string3
arrayList는 쿼리 연산자를 호출할 수 없지만 Cast<T>를 사용하여 OrderBy를 호출할 수 있게 만들어 주었다.
만약 arrayList에 다양한 속성이 들어있다면 OfType<T>을 사용해서 원하는 요소만 뽑아낼수도 있다.
'C# > Enumerable (Linq)' 카테고리의 다른 글
[C#] Enumerable.Union() 메서드 (0) | 2024.12.13 |
---|---|
[C#] Enumerable.FirstOrDefault() 메서드 (0) | 2024.12.10 |
[C#] Linq (람다식 메서드) (0) | 2024.11.05 |
[C#] Linq (Enumerable 클래스) (0) | 2024.07.23 |