C# 中的 .Any 和 .Count 哪个更有效(扩展方法)

What's more efficient in .Any and .Count in C# (Extension methods)

public void MethodName(ObservableCollection<DataCollection> dataCollection)
    {
        if (dataCollection != null)
        {
            IsChecked = dataCollection.Any(o => o.DataCollectionID.Equals(30));

            IsChecked = dataCollection.Where(o => o.DataCollectionID.Equals(30)).Count() > 0;
        }            
    }

任何人都可以解释一下,从以上两个过滤中使用什么是最有效的方法? 。任何?或.Where.Count?

注意:假设 dataCollection 有超过 10,000 个项目。

请指教。谢谢

正在审查框架...视情况而定。我在假设世界中的最初直觉:

Any() checks to see if there is a single value. If so, then it returns true. This is an O(1) operation.

Count() would have to either do one of the following:

1) access a running tally of items in the collection, or 2) count the items in the collection

In the best case (#1) the operation is O(1). In the worst, (#2), it's O(n).

实际上,Any() 使用集合的迭代器来确定是否有下一个值。因此,Any() 是否为 O(1) 操作取决于集合。如果它是一个糟糕的实现,它可能是 O(n)。

例如,假设 Array 迭代器很愚蠢,它会查找第一个非空值。它必须检查数组中的每个项目,因此 Any() 在这种情况下意味着 O(n)。 (事实上​​ ,对于长度> 1的任何数组,Any() returns true)。

Count() 尝试查看集合是否实现了 ICollectionICollection<T>,如果是,则 returns Count 属性'值。如果底层实现保留一个 运行 选项卡,那可能是 O(1)。如果不是,那可能是 O(n) 最坏的情况。

如果可枚举 没有 实现这些接口之一,Count() 简单地迭代整个集合,沿途计数。那是 O(n).

tl;dr:根据实现,Any() 更有可能比 Count() 快得多。