以下是關於IEnumerator
的文檔。它們用於獲取列表的值,其中的長度不一定是提前知道的(儘管它可能是)。這個詞來自enumerate
,意思是「一個一個地計數或命名」。
IEnumerator
和IEnumerator<T>
由所有IEnumerable
和IEnumerable<T>
接口提供經由GetEnumerator()
在.NET(後者提供兩者)。這很重要,因爲foreach
語句旨在通過這些接口方法直接與枚舉器一起工作。
因此,例如:
IEnumerator enumerator = enumerable.GetEnumerator();
while (enumerator.MoveNext())
{
object item = enumerator.Current;
// Perform logic on the item
}
變爲:
foreach(object item in enumerable)
{
// Perform logic on the item
}
至於您的具體方案,幾乎在.NET所有集合實施IEnumerable
。正因爲如此,你可以做到以下幾點:
public IEnumerator Enumerate(IEnumerable enumerable)
{
// List implements IEnumerable, but could be any collection.
List<string> list = new List<string>();
foreach(string value in enumerable)
{
list.Add(value + "roxxors");
}
return list.GetEnumerator();
}
重置()不被foreach調用。它意味着COM互操作,並不是所有的枚舉器都支持它(實際上大多數枚舉器*不支持它)。 –
統計員是隻讀的,對嗎?我怎樣才能返回一個包含我的修改使用這種模式的枚舉類型? – BlackVegetable
@Martinho你是對的。 –