欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#泛型集合類型實(shí)現(xiàn)添加和遍歷

 更新時(shí)間:2022年08月27日 11:58:02   作者:Darren Ji  
這篇文章介紹了C#泛型集合類型實(shí)現(xiàn)添加和遍歷的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

在"C#中List<T>是怎么存放元素的"中,分析了List<T>的源碼,了解了List<T>是如何存放元素的。這次,就自定義一個(gè)泛型集合類型,可實(shí)現(xiàn)添加元素,并支持遍歷

該泛型集合類型一定需要一個(gè)添加元素的方法,在添加元素的時(shí)候需要考慮:當(dāng)添加的元素超過(guò)當(dāng)前數(shù)組的容量,就讓數(shù)組擴(kuò)容;為了支持循環(huán)遍歷,該泛型集合類型必須提供一個(gè)迭代器(實(shí)現(xiàn)IEnumerator接口)。

    public class MyList<T>
    {
        T[] items = new T[5];
        private int count;
        public void Add(T item)
        {
            if(count == items.Length)
               Array.Resize(ref  items, items.Length * 2);
            items[count++] = item;
        }
        public IEnumerator<T> GetEnumerator()
        {
            return new MyEnumeraor(this);
        }
        class MyEnumeraor : IEnumerator<T>
        {
            private int index = -1;
            private MyList<T> _myList;
            public MyEnumeraor(MyList<T> myList)
            {
                _myList = myList;
            }
            public T Current
            {
                get
                {
                    if (index < 0 || index >= _myList.count)
                    {
                        return default(T);
                    }
                    return _myList.items[index];
                }
            }
            public void Dispose()
            {
                
            }
            object System.Collections.IEnumerator.Current
            {
                get { return Current; }
            }
            public bool MoveNext()
            {
                return ++index < _myList.count;
            }
            public void Reset()
            {
                index = -1;
            }
        }
    }
  • 泛型集合類型維護(hù)著一個(gè)T類型的泛型數(shù)組
  • 私有字段count是用來(lái)計(jì)數(shù)的,每添加一個(gè)元素計(jì)數(shù)加1
  • 添加方法考慮了當(dāng)count計(jì)數(shù)等于當(dāng)前元素的長(zhǎng)度,就讓數(shù)組擴(kuò)容為當(dāng)前的2倍
  • 迭代器實(shí)現(xiàn)了IEnumerator<T>接口

客戶端調(diào)用。

    class Program
    {
        static void Main(string[] args)
        {
            MyList<int> list = new MyList<int>();
            list.Add(1);
            list.Add(2);
            foreach (int item in list)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }
    }

另外,IEnumerable和IEnumerator的區(qū)別是什么呢?
其實(shí),真正執(zhí)行迭代的是IEnumerator迭代器。IEnumerable接口就提供了一個(gè)方法,就是返回IEnumerator迭代器。

public interface IEnumerable
{
    IEnumerator GetEnumerator();
}

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

最新評(píng)論