我正在实现自己的ArrayList类,当我意识到这一点时,感到很惊讶 public System.Collections.Generic.IEnumerator<T> GetEnumerator() { return _array.GetEnumerator(); } 没有工作。 什么原因数组不在IE中实现IEnumerator? 有没有解决办法? 谢谢
我有一个接口,除其他外,实现了“公共IEnumerator GetEnumerator()”方法,所以我可以在foreach语句中使用接口。 我在几个类中实现了这个接口,并且在其中一个类中,我想返回一个空的IEnumerator。 现在我按照以下的方式来做这件事: public IEnumerator GetEnumerator() { ArrayList arr = new ArrayList(); return arr.GetEnumerator(); } 然而,我认为这是一个丑陋的黑客,我不禁认为有一个更好的方式返回一个空的IEnumerator。 在那儿?
我们都知道可变结构总体上是邪恶的。 我也很确定,因为IEnumerable<T>.GetEnumerator()返回IEnumerator<T>types,所以结构立即被装箱到一个引用types中,比起它们只是引用types开销更多。 那么为什么在BCLgenerics集合中,所有的枚举器都是可变结构呢? 当然必须有一个很好的理由。 唯一发生在我身上的是可以很容易地复制结构体,从而将枚举器状态保留在任意点上。 但是,向IEnumerator接口添加一个Copy()方法本来就不那么麻烦,所以我不认为这是一个合理的理由。 即使我不同意devise决定,我也希望能够理解背后的理由。
我有困难记住如何(但不是为什么)在C#中使用IEnumerator s。 我已经习惯了Java,它的精彩文档能够很好地解释初学者的一切。 所以,请和我一起承受。 我试图从这些委员会的其他答案学习无济于事。 我没有提出一个已经被问过的通用问题,而是一个具体的例子来为我澄清事情。 假设我有一个方法需要传递一个IEnumerable<String>对象。 所有的方法需要将字母roxxors连接到迭代器中每个String的末尾。 然后它将返回这个新的迭代器(当然原来的IEnumerable对象保持原样)。 我将如何去做这件事? 当然,除了我之外,这里的答案应该可以帮助很多关于这些对象的基本问题。
我注意到genericsIEnumerator<T>从IDisposableinheritance,但非generics接口IEnumerator不。 为什么这样devise? 通常,我们使用foreach语句来通过一个IEnumerator<T>实例。 foreach生成的代码实际上有最后调用Dispose()的try-finally块。
在C#中,如何获得给定数组的generics枚举? 在下面的代码中, MyArray是一个MyType对象的数组。 我想以所示的方式获得MyIEnumerator ,但似乎我得到一个空的枚举(虽然我已经证实MyArray.Length > 0 )。 MyType [ ] MyArray = … ; IEnumerator<MyType> MyIEnumerator = ( MyArray.GetEnumerator() as IEnumerator<MyType> ) ;
可能重复: 任何人都可以解释IEnumerable和IEnumerator给我? IEnumerator和IEnumerable之间有什么区别?
任何人都可以解释IEnumerable和IEnumerator给我? 比如什么时候用foreach呢? IEnumerable和IEnumerator有什么区别? 为什么我们需要使用它?