gpt4 book ai didi

c# - 有没有办法确定 IEnumerable 是序列生成器还是真正的集合?

转载 作者:太空狗 更新时间:2023-10-30 00:16:16 26 4
gpt4 key购买 nike

举个例子:

假设我有一个方法:

public void DoStuff(IEnumerable<T> sequence)
{
if (/* is lazy sequence */) throw ...

// Do stuff...
}

我想防止潜在的无限序列。

编辑:

详细来说,防止无限收集只是其中一种用途。正如乔恩所说。您可以轻松拥有无限的 IList。好点。

其他用途可能是检测数据是否可能不可重复。就像一个随机生成器。 True collection 的数据已经在内存中,迭代两次会得到相同的数据。

最佳答案

没有什么是可以保证的,不。你可以看到序列是否也实现了 IList<T> - 这将禁止迭代器 block 实现,但仍然可以是一个永远持续的“虚拟”列表,并且对于其他一些有限的非迭代器 block 集合也会失败。

就您要防止的内容而言,20 亿长的序列是否适合您要执行的操作?如果您最终得到超过一些“限制”(但懒惰地这样做),那么扩展方法会抛出异常吗? (有点像 Take,但最后爆炸了。)

关于c# - 有没有办法确定 IEnumerable<T> 是序列生成器还是真正的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7796443/

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