任何人都可以向我解释IEnumerable和IEnumerator吗?
例如,什么时候在foreach上使用它?IEnumerable和IEnumerator之间有什么区别?为什么我们需要使用它?
IEnumerator和IEnumerable有什么区别?
在C#中,如何从给定数组中获取通用枚举器?
在下面的代码中,MyArray是一个MyType对象数组.我想以MyIEnumerator所示的方式获得,但似乎我获得了一个空的调查员(尽管我已经证实了这一点MyArray.Length > 0).
MyType [ ] MyArray = ... ;
IEnumerator<MyType> MyIEnumerator
= ( MyArray.GetEnumerator() as IEnumerator<MyType> ) ;
Run Code Online (Sandbox Code Playgroud) 我注意到泛型IEnumerator<T>继承自IDisposable,但非通用接口IEnumerator没有.为什么这样设计?
通常,我们使用foreach语句来遍历IEnumerator<T>实例.生成的foreach代码实际上有try-finally块,最终调用Dispose().
我在记住如何(但不是为什么)IEnumerator在C#中使用s 时遇到了麻烦.我已经习惯了Java的精彩文档,可以很好地向初学者解释一切.所以拜托,请耐心等待.
我试过从这些板上的其他答案中学习无济于事.我没有问过之前已经提出的一般性问题,而是有一个具体的例子可以为我澄清一些事情.
假设我有一个需要传递IEnumerable<String>对象的方法.所有方法需要做的是将字母连接roxxors到String迭代器中每个字符的末尾.然后它将返回这个新的迭代器(当然原始IEnumerable对象保持不变).
我该怎么做?当然,除了我之外,这里的答案应该可以帮助许多人解决有关这些对象的基本问题.
我有一个接口,除其他外,实现了一个"公共IEnumerator GetEnumerator()"方法,所以我可以在foreach语句中使用该接口.
我在几个类中实现了这个接口,在其中一个类中,我想返回一个空的IEnumerator.现在我通过以下方式执行此操作:
public IEnumerator GetEnumerator()
{
ArrayList arr = new ArrayList();
return arr.GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)
但是我认为这是一个丑陋的黑客,我不禁认为有一个更好的方法来返回一个空的IEnumerator.在那儿?
我正在实现自己的ArrayList类,当我意识到这一点时,我感到很惊讶
public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
return _array.GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)
没用.数组在.NET中不实现IEnumerator的原因是什么?
有没有解决方法?
谢谢
如何正确地打电话IEnumerator.Reset?
文件说:
该
Reset方法用于COM互操作性.它不一定需要实施; 相反,实施者可以简单地抛出一个NotSupportedException.
好的,这也就是说我不应该打电话给它吗?
它是如此诱人的使用流量控制例外:
using (enumerator = GetSomeExpensiveEnumerator())
{
while (enumerator.MoveNext()) { ... }
try { enumerator.Reset(); } //Try an inexpensive method
catch (NotSupportedException)
{ enumerator = GetSomeExpensiveEnumerator(); } //Fine, get another one
while (enumerator.MoveNext()) { ... }
}
Run Code Online (Sandbox Code Playgroud)
这是我们应该如何使用它?或者我们不打算从托管代码中使用它?
是yield return用于实现快捷方式IEnumerable和IEnumerator?