我有一个名为Primes的类,这个类实现GetEnumerator()而不实现IEnumerable接口.
public class Primes
{
private long min;
private long max;
public Primes()
: this(2, 100)
{
}
public IEnumerator GetEnumerator()
{...}
Run Code Online (Sandbox Code Playgroud)
我不明白.我错过了什么吗?
首先,正如其他人所说,你可以介绍反正没有实现接口的自己的方法-你可以写你自己的Dispose方法,无需实施IDisposable等驰名接口我建议这几乎是一个坏主意(如读者有一定的期望)但它完全有效.
更重要的是,foreachC#中的语句可以在不IEnumerable涉及的情况下工作.编译器有效地对名称进行编译时鸭子输入GetEnumerator(),Current和MoveNext().这主要是为了允许在泛型之前在C#1中进行强类型(和非装箱)迭代.有关详细信息,请参阅C#3规范的第8.8.4节.
然而,它通常是一个坏主意,要做到这一点,现在,如果你不希望能够轻松地遍历实例作为集合的内容-事实上我建议实施IEnumerable<T>,而不是只IEnumerable.
| 归档时间: |
|
| 查看次数: |
1012 次 |
| 最近记录: |