Skip to main content
 首页 » 编程设计

c#面试题: . Any() vs if (.Length 0) 测试集合是否有元素

2023年08月03日31xing901022

在最近的一次采访中,有人问我 .Any().Length > 0 之间的区别是什么,以及为什么我会在测试时使用其中一个来查看是否集合有元素。

这让我有点震惊,因为它看起来有点明显,但我觉得我可能遗漏了什么。

我建议您在只需要知道集合包含元素时使用 .Length,在希望过滤结果时使用 .Any()

大概 .Any() 也会受到性能影响,因为它必须在内部执行循环/查询。

请您参考如下方法:

Length仅存在于某些集合类型中,例如 Array .

Any是一种扩展方法,可用于任何实现 IEnumerable<T> 的集合.

如果Length存在则可以使用它,否则使用 Any .


Presumably .Any() takes a performance hit too as it has to do a loop / query internally.

Enumerable.Any不循环。它获取一个迭代器并检查是否 MoveNext返回真。这是来自 .NET Reflector 的源代码.

public static bool Any<TSource>(this IEnumerable<TSource> source) 
{ 
    if (source == null) 
    { 
        throw Error.ArgumentNull("source"); 
    } 
    using (IEnumerator<TSource> enumerator = source.GetEnumerator()) 
    { 
        if (enumerator.MoveNext()) 
        { 
            return true; 
        } 
    } 
    return false; 
}