您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關如何實現IEnumerator接口分析,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
/*語法:(C#)*/ [ComVisibleAttribute(true)] [GuidAttribute("496B0ABF-CDEE-11d3-88E8-00902754C43A")] public interface IEnumerator
備注:
/* IEnumerator 是所有非泛型枚舉數的基接口。 C# 語言的 foreach 語句(在 Visual Basic 中為 for each)隱藏了枚舉數的復雜性。因此,建議 foreach,而不直接操作枚舉數。枚舉數可用于讀取集合中的數據,但不能用于修改基礎集。 最初,枚舉數定位在集合中第一個元素前。Reset 方法還會將枚舉數返回到此位置。在此位置,調用 Current 屬性會引發異常。因此,在讀取 Current 的值之前,必須調用MoveNext 方法將枚舉數提前到集合的第一個元素。在調用 MoveNext 或 Reset 之前,Current 返回同一對象。MoveNext 將 Current 設置為下一個元素。 如果 MoveNext 越過集合的末尾,則枚舉數將被放置在此集合中最后一個元素的后面,而且 MoveNext 返回 false。當枚舉數位于此位置時,對 MoveNext 的后續調用也返回 false。如果最后一次調用 MoveNext 返回 false,則調用 Current 會引發異常。若要再次將 Current 設置為集合的第一個元素,可以調用 Reset,然后再調用MoveNext。 只要集合保持不變,枚舉數就保持有效。如果對集合進行了更改(如添加、修改或刪除元素),則枚舉數將失效且不可恢復,并且下一次對 MoveNext 或 Reset 的調用將引發InvalidOperationException。如果在 MoveNext 和 Current 之間修改集合,那么即使枚舉數已經無效,Current 也將返回它所設置成的元素。 枚舉數沒有對集合的獨占訪問權;因此,枚舉通過集合在本質上不是一個線程安全的過程。即使一個集合已進行同步,其他線程仍可以修改該集合,這將導致枚舉數引發異常。若要在枚舉過程中保證線程安全,可以在整個枚舉過程中鎖定集合,或者捕捉由于其他線程進行的更改而引發的異常。 */
樣例:
using System; using System.Collections; //person類 public class Person { public Person(string fName, string lName) { this.firstName = fName; this.lastName = lName; } public string firstName; public string lastName; } //People類,實現IEnumerable public class People : IEnumerable { private Person[] _people; public People(Person[] pArray) { _people = new Person[pArray.Length]; for (int i = 0; i < pArray.Length; i++) { _people[i] = pArray[i]; } } public IEnumerator GetEnumerator() { return new PeopleEnum(_people); } } //實現IEnumerator public class PeopleEnum : IEnumerator { public Person[] _people; // Enumerators are positioned before the first element // until the first MoveNext() call. int position = -1; public PeopleEnum(Person[] list) { _people = list; } public bool MoveNext() { position++; return (position < _people.Length); } public void Reset() { position = -1; } public object Current { get { try { return _people[position]; }catch (IndexOutOfRangeException) { throw new InvalidOperationException(); } } } } //app class App { static void Main() { Person[] peopleArray = new Person[3] { new Person("John", "Smith"), new Person("Jim", "Johnson"), new Person("Sue", "Rabon"), }; People peopleList = new People(peopleArray); foreach (Person p in peopleList) Console.WriteLine(p.firstName + " " + p.lastName); } } /* This code produces output similar to the following: * * John Smith * Jim Johnson * Sue Rabon * */
上述就是小編為大家分享的如何實現IEnumerator接口分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。