我经常发现自己编写这样的代码:
collection.First(s => s is MyType) as MyType;
是否有更具体的Linq方法,它返回某种类型的第一个元素?
像这样:collection.FirstOfType<MyType>();
我也查看了Jon Skeets MoreLinq项目,但没有运气
答案 0 :(得分:12)
使用Enumerable.OfType<T>
按指定类型过滤集合:
collection.OfType<MyType>().First();
注意 - 如果集合中可能没有MyType
项,则使用FirstOrDefault()
以避免例外。
内部OfType
只使用is
运算符来生成与给定类型兼容的所有项目。像这样的东西(实际上OfType
返回OfTypeIterator
迭代集合):
public static IEnumerable<TResult> OfType<TResult>(this IEnumerable source)
{
foreach (object obj in source)
{
if (!(obj is TResult))
continue;
yield return (TResult)obj;
}
}