无数可数仍然是"可枚举的"?

Ken*_*Kin 4 c# ienumerable terminology semantics

像两个重叠的线段一样,我们可以找到无限的交点.列举所有这些点可能没有意义,我们可能只想表明这个集合是无限的.

浮点数已定义NegativeInfinityPositiveInfinity.表示计数序数的数字似乎不一定使用浮点数,但是,整数没有定义为表示无穷大的东西.

所以我试着实现无限的可枚举.但我突然对"可枚举"一词感到困惑.

有没有更好的方法来解决这个问题?并且无数可枚举仍然可以枚举

  • 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)

编辑:

谢谢回答.我混淆IEnumerableIEnumerator.GetEnumerator方法的返回Infinity.Enumerable是因为我希望宣布一个额外的虚拟对象,如:

static readonly object dummy=new object();
Run Code Online (Sandbox Code Playgroud)

和收益率dummyGetEnumerator方法.

Ree*_*sey 6

并且无数可枚举仍然可以枚举?

在这个意义上,可枚举基于枚举的第二个定义:

一个接一个地指定

它并不是指(更常见的计算外)定义,它实际上意味着"能够被计算".

从这个意义上讲,无限系列绝对可以列出一个又一个项目,并且可以作为可枚举.

话虽这么说,我在这个例子中没有看到你的代码背后的目的.无限可枚举通常表示类似于没有结束的数据流,或者没有"结束"的其他来源,但是有可能不断地提取信息.

  • 数学分析中的"可数"和"可数"都没有带有有限基数的内涵.http://mathworld.wolfram.com/CountablyInfinite.html (4认同)

Kon*_*lph 5

正的自然数是无限的并且可以清楚地枚举(1,2,3,......).即使在C#之外,这个概念也是明确定义的.

但是你的类有问题,因为你是混淆IEnumerableIEnumerator接口.该GetEnumerator方法只返回一个枚举器.是无限的.

IEnumerable在C#中轻松实现无限(作为方法而不是类)如下所示:

IEnumerable<int> Infinite() {
    int i = 1;
    while (true)
        yield return i++;
}
Run Code Online (Sandbox Code Playgroud)

警告:int在某些时候溢出.但是,默认情况下,C#将简单地循环回负数.

  • 溢出时的行为取决于它是否在已检查的上下文中,可以在每个项目的基础上更改,也可以根据代码块进行更改. (3认同)