中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現IEnumerator接口分析

發布時間:2022-01-07 21:37:55 來源:億速云 閱讀:148 作者:柒染 欄目:編程語言

這期內容當中小編將會給大家帶來有關如何實現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接口分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

航空| 吴川市| 株洲市| 德化县| 会泽县| 富宁县| 樟树市| 呼玛县| 宁国市| 左权县| 乡宁县| 都安| 白水县| 华阴市| 莒南县| 新邵县| 库伦旗| 抚州市| 东光县| 桐梓县| 宁化县| 筠连县| 克东县| 罗平县| 前郭尔| 枣强县| 梁山县| 蒙山县| 黄平县| 丰原市| 张家口市| 五河县| 万盛区| 简阳市| 漳浦县| 白朗县| 阿瓦提县| 大兴区| 治多县| 蒲城县| 兰考县|