LINQ는 IEnumerable에서 작동합니까?
구현하는 클래스가 IEnumerable
있지만 구현하지 않습니다 IEnumerable<T>
. 이 클래스를 변경할 수 없으며 대신 다른 클래스를 사용할 수 없습니다. MSDN에서 이해했듯이 LINQ는 클래스가IEnumerable<T>
. 을 사용해 보았지만 instance.ToQueryable()
여전히 LINQ 메서드를 활성화하지 않습니다. 이 클래스는 한 가지 유형의 인스턴스 만 포함 할 수 있으므로 클래스가를 구현할 수 IEnumerable<T>
있지만 그렇지 않습니다. 그렇다면 LINQ 식을 사용하여이 클래스를 쿼리하려면 어떻게해야합니까?
LINQ를 완전히 지원하는 IEnumerable의 제네릭 버전을 사용 Cast<T>()
하거나 OfType<T>
가져올 수 있습니다 .
예 :
IEnumerable objects = ...;
IEnumerable<string> strings = objects.Cast<string>();
또는 어떤 유형이 포함되어 있는지 모르는 경우 언제든지 다음을 수행 할 수 있습니다.
IEnumerable<object> e = objects.Cast<object>();
비 제네릭 IEnumerable
이 다양한 유형의 객체를 포함하고 예를 들어 관심이 있다면. 할 수있는 문자열 :
IEnumerable<string> strings = objects.OfType<string>();
예, 그럴 수 있습니다. Cast
함수 를 사용하여 typed로 변환해야합니다 IEnumerable<T>
. 예를 들면
IEnumerable e = ...;
IEnumreable<object> e2 = e.Cast<object>();
이제 e2
이며 IEnumerable<T>
모든 LINQ 함수를 사용할 수 있습니다.
LINQ의 쿼리 이해 구문을 사용할 수도 있습니다.이 구문 item
은 형식이 지정된 경우 범위 변수의 형식 ( 이 예에서는)으로 캐스팅 됩니다.
IEnumerable list = new ArrayList { "dog", "cat" };
IEnumerable<string> result =
from string item in list
select item;
foreach (string s in result)
{
// InvalidCastException at runtime if element is not a string
Console.WriteLine(s);
}
효과는 @JaredPar의 솔루션과 동일합니다. 자세한 내용은 7.16.2.2 : C # 언어 사양의 명시 적 범위 변수 유형 을 참조하십시오.
참고 URL : https://stackoverflow.com/questions/7757365/does-linq-work-with-ienumerable
'Development Tip' 카테고리의 다른 글
CSS : 고정 높이의 컨테이너 내부에서 div에 대한 스크롤바를 얻는 방법 (0) | 2020.10.07 |
---|---|
git 루트 폴더의 이름을 바꾸는 방법은 무엇입니까? (0) | 2020.10.07 |
FileStream 대 / 차이점 StreamWriter? (0) | 2020.10.07 |
패키지로드시 메시지 비활성화 (0) | 2020.10.07 |
누락 된 SDK 플랫폼 Android, API 18 (0) | 2020.10.07 |