Ken*_*Kin 4 c# ienumerable terminology semantics
像两个重叠的线段一样,我们可以找到无限的交点.列举所有这些点可能没有意义,我们可能只想表明这个集合是无限的.
浮点数已定义NegativeInfinity和PositiveInfinity.表示计数或序数的数字似乎不一定使用浮点数,但是,整数没有定义为表示无穷大的东西.
所以我试着实现无限的可枚举.但我突然对"可枚举"一词感到困惑.
有没有更好的方法来解决这个问题?并且无数可枚举仍然可以枚举?
码
public partial class Infinity: IEnumerable<object> {
IEnumerator<object> IEnumerable<object>.GetEnumerator() {
for(; ; )
yield return Infinity.Enumerable;
}
public IEnumerator GetEnumerator() {
for(; ; )
yield return Infinity.Enumerable;
}
public Infinity LongCount(
Func<object, bool> predicate=default(Func<object, bool>)) {
return Infinity.Enumerable;
}
public Infinity Count(
Func<object, bool> predicate=default(Func<object, bool>)) {
return Infinity.Enumerable;
}
public static readonly Infinity Enumerable=new Infinity();
}
Run Code Online (Sandbox Code Playgroud)编辑:
谢谢回答.我不混淆IEnumerable和IEnumerator.GetEnumerator方法的返回Infinity.Enumerable是因为我不希望宣布一个额外的虚拟对象,如:
static readonly object dummy=new object();
Run Code Online (Sandbox Code Playgroud)
和收益率dummy的GetEnumerator方法.
正的自然数是无限的并且可以清楚地枚举(1,2,3,......).即使在C#之外,这个概念也是明确定义的.
但是你的类有问题,因为你是混淆IEnumerable和IEnumerator接口.该GetEnumerator方法只返回一个枚举器.那是无限的.
IEnumerable在C#中轻松实现无限(作为方法而不是类)如下所示:
IEnumerable<int> Infinite() {
int i = 1;
while (true)
yield return i++;
}
Run Code Online (Sandbox Code Playgroud)
警告:int在某些时候溢出.但是,默认情况下,C#将简单地循环回负数.