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

thu*_*eys 4 c# linq

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

collection.First(s => s is MyType) as MyType;
Run Code Online (Sandbox Code Playgroud)

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

像这样:

collection.FirstOfType<MyType>();
Run Code Online (Sandbox Code Playgroud)

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

Ser*_*kiy 12

用于Enumerable.OfType<T>按指定类型过滤集合:

collection.OfType<MyType>().First();
Run Code Online (Sandbox Code Playgroud)

注意 - 如果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;
    }
}
Run Code Online (Sandbox Code Playgroud)