This question already has answers here:
What is the difference between IEnumerator and IEnumerable? [duplicate]
(4个答案)
已关闭6年。
我正在为我的C#考试做准备。
我对这个问题的答案感到困惑:
我的答案是 b )。但是这本书:MCSD认证工具包说这是和)。
有人可以告诉我为什么吗?我意识到您可以使用
和
如您在这里注意到的,当一个类型实现
然后,当我们遍历一个集合时,称为
为什么我们有
正如MSDN中所述:
(4个答案)
已关闭6年。
我正在为我的C#考试做准备。
我对这个问题的答案感到困惑:
我的答案是 b )。但是这本书:MCSD认证工具包说这是和)。
有人可以告诉我为什么吗?我意识到您可以使用
Enumerator
获取GetEnumerator()
,然后调用MoveNext
和Reset
方法在列表中移动(并使用Current
访问迭代器引用的当前元素)。但是实现IEnumerable
和IEnumerator
难道不是在foreach
循环中使用对象的原因吗? 最佳答案
正确的答案是和,如果您看一下接口(interface)的定义,这一点很清楚:
[GuidAttribute("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
[ComVisibleAttribute(true)]
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
和
[ComVisibleAttribute(true)]
[GuidAttribute("496B0ABF-CDEE-11d3-88E8-00902754C43A")]
public interface IEnumerator
{
Object Current { get; }
bool MoveNext();
void Reset();
}
如您在这里注意到的,当一个类型实现
IEnumerable
接口(interface)时,它应该具有一个将返回Enumerator的方法,该对象是一个实现IEnumerator
接口(interface)的对象。然后,当我们遍历一个集合时,称为
IEnumerator
的接口(interface)具有一个保存当前对象的属性,以及两种方法,MoveNext
和Reset
。在幕后,当我们遍历一个集合时,首先会调用名为MoveNext
的Iterator方法。如果是这样,我们得到第一个元素-这是当前对象。然后,一次又一次调用名为MoveNext
的方法,直到返回false。每次调用MoveNext
时,我们都会从集合中获取一个对象,然后进行迭代。为什么我们有
Reset
方法?正如MSDN中所述:
关于c# - 实现IEnumerable和IEnumerator的原因是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24891645/
10-10 23:48