Linq:返回给定类型的第一个实例的方法

时间:2014-03-13 18:24:31

标签: c# linq

我经常发现自己编写这样的代码:

collection.First(s => s is MyType) as MyType;

是否有更具体的Linq方法,它返回某种类型的第一个元素?

像这样:

collection.FirstOfType<MyType>();

我也查看了Jon Skeets MoreLinq项目,但没有运气

1 个答案:

答案 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;
    }
}