C# 語言的 foreach 陳述式 (在 Visual Basic 中為 for each) 會隱藏列舉值的複雜度。因此,建議您使用 foreach,而不要直接使用列舉值。
列舉值可以用來讀取集合中的資料,但是無法用來修改基礎集合。
列舉值一開始會位於集合中第一個元素之前,Reset 方法也會將列舉值帶回這個位置。在這個位置,呼叫 Current 屬性會擲回例外狀況。因此,在讀取 Current 的值之前,必須呼叫 MoveNext 方法,以將列舉值前移至集合的第一個元素。
Current 會傳回相同的物件直到呼叫 MoveNext 或 Reset。MoveNext 會將 Current 設定為下一個元素。
如果 MoveNext 傳遞集合結尾,列舉值就會置於集合的最後一個項目之後,然後 MoveNext 傳回 false。當列舉值位於這個位置時,後續的 MoveNext 呼叫也都會傳回 false。如果最後呼叫 MoveNext 傳回 false,則呼叫 Current 會擲回例外狀況。若要將 Current 再次設定為集合的第一個項目,您可以先呼叫 Reset,然後再呼叫 MoveNext。
只要集合保持不變,列舉值就會保持有效。如果已對集合做變更,例如加入、修改或刪除元素,則列舉值將永遠無效,而再次呼叫 MoveNext 或 Reset 會擲回 InvalidOperationException。如果在 MoveNext 和 Current 之間修改集合,Current 會傳回所設定的元素,即使列舉值已經無效。
列舉值沒有集合的獨佔存取權,因此,列舉一個集合在本質上並不是執行緒安全的程序。即使集合經過同步化,其他的執行緒仍可修改該集合,使列舉值擲回例外狀況。若要保證列舉過程的執行緒安全,您可以在整個列舉過程中鎖定集合,或攔截由其他執行緒的變更所造成的例外狀況。
實作者注意事項
繼承自
IEnumerator 的
Current 屬性會傳回
Object (它是一個 boxed
DictionaryEntry),與
Entry 屬性的傳回值類似。