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

标签 c# linq collections

在最近的一次采访中,有人问我 .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;
}

关于c# - 面试题: . Any() vs if (.Length > 0) 测试集合是否有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2989300/

相关文章:

c# - 检查 String 是否可以转换为 C# 中的给定类型

c# - 如何在wpf中自动调整富文本框的大小?

mysql - 如何通过 nhibernate/fluent nHibernate 使用 MYSQL BIT_COUNT 函数?

c# - 如何通过 Linq 过滤一对多关系的查询

c# - 在标签上写下带有 C₁、C₂、C₃ 等系数的文本

c# - 在 C# 中显示货币

c# - 使用 LINQ 处理 C# 字典

java - 如何查看 java.util.PriorityQueue 的尾部?

filter - 使用 automapper 将过滤器应用于集合

java - ArrayList 根据对象属性排序