陣列可以被foreach語句遍歷陣列中的元素,原因是陣列可以按需提供一個叫做列舉數(enumerator)的物件.列舉數可以依次返回請求的陣列的元素.
對於有列舉數的型別而言,必須有一個方法來獲取它們.在.NET中獲取一個物件列舉數的標準用法是呼叫物件的GetEnumerator方法.實現GetEnumerator方法的型別叫做可列舉型別(enumerable),陣列就是可列舉型別.
要注意列舉數(enumerator)和可列舉型別(enumerable)的區別和聯絡.
列舉數是可以依次返回集合項的類物件,可列舉型別是帶有GetEnumerator方法的型別,它返回列舉數.
當foreach被用來遍歷可列舉型別時,它就會執行如下的行為:
1,透過呼叫GetEnumerator方法獲取物件的列舉數.
2,從列舉數中請求每一項並且把它作為迭代變數,程式碼可以讀但不可以改變.
列舉數共有3種,可以用以下方式來實現列舉數:
1 IEnumerator/IEnumerable介面 ,叫做非泛型介面形式.
2 IEnumerator
3 不使用介面形式.
IEnumerator介面
IEnumerator介面包含3個函式成員:Current,MoveNext,Reset
Current返回序列中當前項的屬性,它是一個只讀屬性.返回object型別的引用,所以可以返回任何型別.
MoveNext是把列舉數位置前進到集合的下一項的方法,它返回布林值,指示新位置是有效位置還是已經超過了序列的尾部.如果是已經到達了尾部,則返回false.
Reset方法把位置重置為原始狀態.
陣列可以被foreach語句遍歷陣列中的元素,原因是陣列可以按需提供一個叫做列舉數(enumerator)的物件.列舉數可以依次返回請求的陣列的元素.
對於有列舉數的型別而言,必須有一個方法來獲取它們.在.NET中獲取一個物件列舉數的標準用法是呼叫物件的GetEnumerator方法.實現GetEnumerator方法的型別叫做可列舉型別(enumerable),陣列就是可列舉型別.
要注意列舉數(enumerator)和可列舉型別(enumerable)的區別和聯絡.
列舉數是可以依次返回集合項的類物件,可列舉型別是帶有GetEnumerator方法的型別,它返回列舉數.
當foreach被用來遍歷可列舉型別時,它就會執行如下的行為:
1,透過呼叫GetEnumerator方法獲取物件的列舉數.
2,從列舉數中請求每一項並且把它作為迭代變數,程式碼可以讀但不可以改變.
列舉數共有3種,可以用以下方式來實現列舉數:
1 IEnumerator/IEnumerable介面 ,叫做非泛型介面形式.
2 IEnumerator
3 不使用介面形式.
IEnumerator介面
IEnumerator介面包含3個函式成員:Current,MoveNext,Reset
Current返回序列中當前項的屬性,它是一個只讀屬性.返回object型別的引用,所以可以返回任何型別.
MoveNext是把列舉數位置前進到集合的下一項的方法,它返回布林值,指示新位置是有效位置還是已經超過了序列的尾部.如果是已經到達了尾部,則返回false.
Reset方法把位置重置為原始狀態.