我们可以在不使用IEnumerable接口的情况下使用getEnumerator()吗?

StackOverflow https://stackoverflow.com/questions/2905737

  •  04-10-2019
  •  | 
  •  

我有一个名为Primes的类,此类在没有实现IEnumerable接口的情况下实现GetEnumerator()。

public class Primes
{
    private long min;
    private long max;

    public Primes()
        : this(2, 100)
    {
    }

    public IEnumerator GetEnumerator()
    {...}

我不明白。我想念什么吗?

有帮助吗?

解决方案

首先,正如其他人所说的那样 Dispose 无实施的方法 IDisposable 等等。对于众所周知的界面,我建议这几乎是一个坏主意(因为读者会有某些期望),但这是完全有效的。

更重要的是, foreach C#中的语句 能够 没有工作 IEnumerable 参与。编译器有效地编译了鸭子在名称上打字 GetEnumerator(), CurrentMoveNext(). 。这主要是为了在仿制药之前允许C#1中的强(和非箱)迭代。有关更多详细信息,请参见C#3规格的第8.8.4节。

但是,如果您现在这样做通常是一个坏主意 希望能够轻松迭代实例内容作为集合 - 的确,我建议实施 IEnumerable<T> 而不是只是 IEnumerable.

其他提示

是的你可以。甚至您也可以在 foreach. 。该类对象的唯一问题不能被抛向 IEnumerable 尽管他们实现了需要的方法。

没有理由您必须实施 IEnumerable 为了创建一个称为的函数 GetEnumerator 返回 IEnumerator, ,这只是意味着您将无法为期望的事物提供该类型的实例 IEnumerable.

界面确保合同,这并不意味着您不能具有与不插入接口的界面中的签名相同的签名方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top