Linq에서 캐스트() 및 Oftype()을 사용하는 경우
두 가지 유형의 주조 방법을 알고 있습니다.IEnumerable
에서Arraylist
린크에서 어떤 경우에 그것들을 사용해야 하는지 궁금해하고 있습니까?
예
IEnumerable<string> someCollection = arrayList.OfType<string>()
또는
IEnumerable<string> someCollection = arrayList.Cast<string>()
이 두 가지 방법의 차이점은 무엇이며 각각의 경우 어디에 적용해야 합니까?
OfType
x 유형에 안전하게 캐스팅할 수 있는 요소만 반환합니다.
Cast
모든 요소를 유형 x에 캐스팅하려고 할 것입니다. 만약 그들 중 일부가 이 유형이 아니라면 당신은 얻을 것입니다.InvalidCastException
편집
예:
object[] objs = new object[] { "12345", 12 };
objs.Cast<string>().ToArray(); //throws InvalidCastException
objs.OfType<string>().ToArray(); //return { "12345" }
출처: LINQ 팁: 열거형.OfType - .NET 솔루션화
기본적으로.Cast<T>()
다음과 같이 구현됩니다.
public IEnumerable<T> Cast<T>(this IEnumerable source)
{
foreach(object o in source)
yield return (T) o;
}
명시적 캐스트를 사용하면 성능이 우수하지만 결과적으로InvalidCastException
캐스팅이 실패하면,이 아이디어에 대한 덜 효율적이지만 유용한 변형은 다음과 같습니다.OfType<T>()
:
public IEnumerable<T> OfType<T>(this IEnumerable source)
{
foreach(object o in source)
if(o is T t)
yield return t;
}
반환된 열거형에는 지정된 유형에 안전하게 캐스트할 수 있는 요소만 포함됩니다.
전화해 보세요Cast<string>()
만약 당신이 모든 품목이string
s.
일부가 문자열이 아닌 경우에는 예외가 적용됩니다.
전화해 보세요OfType<string>()
만약 당신이 일부 품목이 그렇지 않다는 것을 안다면.string
그리고 당신은 그 물건들을 원하지 않습니다.
만약 그들 중 일부가 현이 아니라면, 그들은 새로운 것이 아닐 것입니다.IEnumerable<string>
.
주의해야 할 것은Cast(Of T)
에 사용할 수 있습니다.IEnumerable
다른 LINQ 함수와 달리, 만약 당신이 비일반적인 컬렉션이나 목록에서 LINQ를 사용해야 하는 경우가 있다면, 예를 들어,ArrayList
사용할 수 있습니다.Cast(Of T)
에 던지다, 던지다, 던지다, 던지다, 던지다, 던지다,.IEnumerable(Of T)
LINQ가 작동할 수 있는 곳입니다.
Cast()
컬렉션의 모든 요소를 캐스팅하려고 시도합니다(그리고 요소가 잘못된 유형인 경우 예외를 던집니다).OfType()
올바른 형식의 요소만 반환합니다.
OfType
요소를 필터링하여 지정된 유형의 요소만 반환합니다. Cast
요소를 대상 유형에 캐스팅할 수 없는 경우 충돌합니다.
Cast<T>
모든 항목을 지정된 유형으로 캐스팅하려고 합니다.T
이 캐스트는 실패하거나 예외를 발생시킬 수 있습니다. OfType<T>
원래 컬렉션의 하위 집합을 반환하고 유형이 지정된 개체만 반환합니다.T
.
언급URL : https://stackoverflow.com/questions/4015930/when-to-use-cast-and-oftype-in-linq
'code' 카테고리의 다른 글
XmlSerializer - 유형을 반영하는 동안 오류가 발생했습니다. (0) | 2023.05.23 |
---|---|
git + LaTeX 워크플로우 (0) | 2023.05.23 |
다른 파이프라인에서 Azure Devops 파이프라인 트리거 (0) | 2023.05.23 |
"npm install"을 실행하면 "ERR! code EINTENTITY"(npm 5.3.0)로 반환됩니다. (0) | 2023.05.23 |
Express에 등록된 모든 경로를 가져오는 방법은 무엇입니까? (0) | 2023.05.23 |