使用LINQ在列表中查找特定类型的第一个元素

9q78igpj  于 2022-12-06  发布在  其他
关注(0)|答案(5)|浏览(184)

使用LINQ和C#在元素列表中查找第一个特定类型的项的最短表示法是什么?

dtcbnfnu

dtcbnfnu1#

var first = yourCollection.OfType<YourType>().First();

请注意,如果没有YourType类型的元素,First方法将抛出异常。如果您不希望这样,则可以使用FirstOrDefaultTake(1)来代替,这取决于您希望的行为。

i86rm4rw

i86rm4rw2#

使用OfType扩展方法:

public static T FindFirstOfType<T>(IEnumerable list){
 return list.OfType<T>().FirstOrDefault();
}
fjaof16o

fjaof16o3#

您需要Enumerable.OfType

list.OfType<MyType>().First();
fhg3lkii

fhg3lkii4#

您可以只使用FirstOrDefault,并传入委派以用于比较。

object[] list = new object[] {
    4,
    "something",
    3,
    false,
    "other"
};

string first = list.FirstOrDefault(o => o is string); //something
ars1skjm

ars1skjm5#

我推荐hugoware的答案,以避免不必要的迭代:

(string)source.FirstOrDefault(f => f is string)

但是如果您担心微优化,您可以创建自己的扩展方法:

public static class ListExtensions
{
    public static T FirstOrDefault<T>(this IList source)
    {
        for (int i = 0; i < source.Count; i++)
        {
            if (source[i] is T)
                return (T)source[i];
        }
            
        return default;
    }
}

基准测试使用100个对象列表,其中只有最后一个是字符串(dotnet 7、BenchmarkDotNet):
第一次

相关问题