让我提供一个例子:
假设我有一个方法:
public void DoStuff(IEnumerable<T> sequence)
{
if (/* is lazy sequence */) throw ...
// Do stuff...
}
我希望防止潜在的无限序列。
编辑:
为了详细说明,防止无限集合只是使用方法之一。就像Jon所提到的,你可以很容易地拥有无限的IList。这是一个好观点。
其他用途可能是检测数据是否可能不可重复。比如随机生成器。真实的集合已经在内存中具有数据,对其进行两次迭代将给出相同的数据。
ICollection<T>
呢?(注意:它仍然可以是无限的,也可以是惰性的,但它是一个“集合”)。 - jasonyield return
的序列 - 请原谅,我不记得这种代码块的 C# 术语)是否有限似乎确实是停机问题。确定一个对象是否实际上是接口背后的(严格评估因此有限的)集合可能是可能的,尽管这可能需要绕过类型系统。 - user395760