gpt4 book ai didi

c# - 添加 LINQ 的 LongCount 扩展方法是否有实际原因?

转载 作者:太空狗 更新时间:2023-10-29 22:57:16 25 4
gpt4 key购买 nike

LINQ 有 2 种计算可枚举数的方法:CountLongCount。实际上,这两者之间的唯一区别是第一个返回一个 int,而第二个返回一个 long

我不清楚为什么要添加第二种方法。似乎它的唯一用例是处理超过 2B 元素的枚举。出于以下几个原因,这对我来说似乎是一个糟糕的决定:

  1. 大多数 BCL 集合由一维数组支持,其长度保证适合 int。试图超越它会引发 OverflowException/OutOfMemoryException

  2. LongCount 是 O(n) 因为 IEnumerable 是惰性的。如果您有一个可枚举的 3B 元素,您可以在其上调用 LongCount,然后再次遍历它(如果您想使用任何值,则必须这样做),您将添加一个额外的 3B 迭代,这将非常慢,并且对开发人员隐藏。

  3. 其他 LINQ 操作,例如 ToArray/ToList,由于 (1) 不支持具有 2B+ 元素的枚举。

我是不是遗漏了什么,或者是否有更实际的原因为什么要添加 LongCount?谢谢。

最佳答案

我对这个设计决策没有第一手资料,但我可以提供一个有根据的猜测。

该方法对IQueryable有明显的用处;查询可以很容易地得到一个巨大的数据库表的支持。

我希望

IQueryable<Foo> q = whatever;
long result1 = q.LongCount();
long result2 = q.AsEnumerable().LongCount();

产生相同的答案。要求内存中查询使用返回不同类型的不同方法似乎有悖常理,尤其是当实现可枚举版本如此容易时。

但正如我所说,这是一个有根据的猜测;希望实际从事此设计的人可以插话。

关于c# - 添加 LINQ 的 LongCount 扩展方法是否有实际原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40557019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com