标签: ienumerator

任何人都可以向我解释IEnumerable和IEnumerator吗?

任何人都可以向我解释IEnumerable和IEnumerator吗?

例如,什么时候在foreach上使用它?IEnumerable和IEnumerator之间有什么区别?为什么我们需要使用它?

c# ienumerable ienumerator

256
推荐指数
11
解决办法
19万
查看次数

95
推荐指数
4
解决办法
15万
查看次数

从数组中获取通用枚举器

在C#中,如何从给定数组中获取通用枚举器?

在下面的代码中,MyArray是一个MyType对象数组.我想以MyIEnumerator所示的方式获得,但似乎我获得了一个空的调查员(尽管我已经证实了这一点MyArray.Length > 0).

MyType [ ]  MyArray  =  ... ;
IEnumerator<MyType>  MyIEnumerator
  =  ( MyArray.GetEnumerator() as IEnumerator<MyType> ) ;
Run Code Online (Sandbox Code Playgroud)

c# arrays generics ienumerator

83
推荐指数
4
解决办法
2万
查看次数

为什么IEnumerator <T>从IDisposable继承而非通用IEnumerator不继承?

我注意到泛型IEnumerator<T>继承自IDisposable,但非通用接口IEnumerator没有.为什么这样设计?

通常,我们使用foreach语句来遍历IEnumerator<T>实例.生成的foreach代码实际上有try-finally块,最终调用Dispose().

c# generics ienumerator

72
推荐指数
3
解决办法
8224
查看次数

简单的IEnumerator使用(带示例)

我在记住如何(但不是为什么)IEnumerator在C#中使用s 时遇到了麻烦.我已经习惯了Java的精彩文档,可以很好地向初学者解释一切.所以拜托,请耐心等待.

我试过从这些板上的其他答案中学习无济于事.我没有问过之前已经提出的一般性问题,而是有一个具体的例子可以为我澄清一些事情.

假设我有一个需要传递IEnumerable<String>对象的方法.所有方法需要做的是将字母连接roxxorsString迭代器中每个字符的末尾.然后它将返回这个新的迭代器(当然原始IEnumerable对象保持不变).

我该怎么做?当然,除了我之外,这里的答案应该可以帮助许多人解决有关这些对象的基本问题.

c# ienumerator

66
推荐指数
4
解决办法
16万
查看次数

返回一个空的IEnumerator

我有一个接口,除其他外,实现了一个"公共IEnumerator GetEnumerator()"方法,所以我可以在foreach语句中使用该接口.

我在几个类中实现了这个接口,在其中一个类中,我想返回一个空的IEnumerator.现在我通过以下方式执行此操作:

public IEnumerator GetEnumerator()
{
    ArrayList arr = new ArrayList();
    return arr.GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)

但是我认为这是一个丑陋的黑客,我不禁认为有一个更好的方法来返回一个空的IEnumerator.在那儿?

c# ienumerator

54
推荐指数
5
解决办法
2万
查看次数

为什么BCL Collections使用struct枚举器而不是类?

我们都知道可变结构一般是邪恶的.我也非常确定因为IEnumerable<T>.GetEnumerator()返回类型IEnumerator<T>,结构会立即被装入引用类型,比它们只是引用类型的开销要多得多.

那么为什么在BCL泛型集合中,所有枚举器都是可变结构?当然必须有一个很好的理由.我唯一想到的就是可以轻松复制结构,从而在任意点保留枚举器状态.但是Copy()IEnumerator接口上添加一个方法本来就不那么麻烦了,所以我不认为这本身就是一个逻辑上的理由.

即使我不同意设计决定,我也希望能够理解它背后的原因.

.net c# ienumerator base-class-library

53
推荐指数
2
解决办法
4853
查看次数

为什么.net中的数组只实现IEnumerable而不是IEnumerable <T>?

我正在实现自己的ArrayList类,当我意识到这一点时,我感到很惊讶

public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
    return _array.GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)

没用.数组在.NET中不实现IEnumerator的原因是什么?

有没有解决方法?

谢谢

.net c# arrays ienumerable ienumerator

42
推荐指数
1
解决办法
3万
查看次数

我如何使用IEnumerator.Reset()?

如何正确地打电话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)

这是我们应该如何使用它?或者我们不打算从托管代码中使用它?

.net c# ienumerator

34
推荐指数
2
解决办法
9991
查看次数

收益率回报== IEnumerable和IEnumerator?

yield return用于实现快捷方式IEnumerableIEnumerator

c# ienumerable ienumerator iterator yield

32
推荐指数
1
解决办法
7862
查看次数