谁能给我解释一下IEnumerable和IEnumerator之间的区别,以及如何使用它们?
谢谢!
发布于 2010-04-14 16:13:42
通常,IEnumerable是可以枚举的对象,例如列表或数组。IEnumerator是存储枚举状态的对象。
它们不是一个且相同的原因是,即使在单线程应用程序中,您也可以在同一时间对同一对象进行多个枚举。例如,考虑以下代码:
foreach (x in mylist)
{
foreach (y in mylist)
{
if (x.Value == y.Value && x != y)
{
// Found a duplicate value
}
}
}如果mylist是IEnumerable的适当实现,这将很好地工作,但如果mylist将自身作为枚举器返回,则此方法将失败。
发布于 2010-04-14 16:27:16
IEnumerable接口定义了一个可以枚举的类,即它包含可以通过枚举访问的元素。
IEnumerator接口定义了一个可以对一系列元素执行枚举的类。
区别在于IEnumerable的意思是“您可以枚举我”,而IEnumerator执行枚举任务。
更详细地说,IEnumerable公开了一个方法GetEnumerator。此方法返回一个IEnumerator,然后您可以使用该use执行枚举。通常,您不需要自己处理这个方法,因为foreach关键字会为您处理它。
foreach(int element in myList)
{
// Do some work...
}这段代码实际上是由编译器为您展开成这样的:
IEnumerator enumerator = myList.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
int element = (int)enumerator.Current;
// Do some work...
}
}
finally
{
IDisposable disposable = enumerator as System.IDisposable;
if (disposable != null) disposable.Dispose();
}如您所见,这里使用了一个IEnumerator来执行元素的枚举。
发布于 2010-04-14 16:14:56
IEnumerable是可以枚举的东西。IEnumerator是执行该枚举的方法。所以IEnumerable只定义了一个方法-- GetEnumerator,它返回IEnumerator的一个实例来做实际的跑腿工作……
https://stackoverflow.com/questions/2635818
复制相似问题