程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 自己寫一個泛型集合類型,可實現添加和遍歷,集合

自己寫一個泛型集合類型,可實現添加和遍歷,集合

編輯:C#入門知識

自己寫一個泛型集合類型,可實現添加和遍歷,集合



在"C#中List<T>是怎麼存放元素的"中,分析了List<T>的源碼,了解了List<T>是如何存放元素的。這次,就自定義一個泛型集合類型,可實現添加元素,並支持遍歷。

 

該泛型集合類型一定需要一個添加元素的方法,在添加元素的時候需要考慮:當添加的元素超過當前數組的容量,就讓數組擴容;為了支持循環遍歷,該泛型集合類型必須提供一個迭代器(實現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;
            }
        }
    }

○ 泛型集合類型維護著一個T類型的泛型數組
○ 私有字段count是用來計數的,每添加一個元素計數加1
○ 添加方法考慮了當count計數等於當前元素的長度,就讓數組擴容為當前的2倍
○ 迭代器實現了IEnumerator<T>接口

 

客戶端調用。

    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的區別是什麼呢?
其實,真正執行迭代的是IEnumerator迭代器。IEnumerable接口就提供了一個方法,就是返回IEnumerator迭代器。

public interface IEnumerable
{
    IEnumerator GetEnumerator();
}

C#中把一個實體類A放在list泛型集合list1中,在取出時根據A中各字段的值進行合並應該怎辦

你好,你的問題只能是遍歷集合了:
假設list2為B的泛型集合

參考代碼:
foreach(A a1 in list1){
B b1 = new B();
b1.a=a1.a;
//根據bcd不同值給b1中所有字段
b1.e=a1.e;
list2.add(b1);
}
 

c#泛型集合的遍歷

有三種
很簡單,給你舉個例子:
1、先聲明一個Dictoinary<key,value>泛型集合
創建一個Student類的對象Student stu=new Student()(在這個類中
有一個name屬性)
Dictionary<student.name,Student> students=new Dictionary<student.name,Student>();
students.Add(stu);
2、開始遍歷
(1)可以用value遍歷就是Stuent的 對象
foreach(Student stu in students.values)
{}
(2)也可以用key遍歷 即student.name
foreach(string key in students.keys)
{}
3、另外list<T>泛型集合也同樣的道理,只不過,
它遍歷時要通過索引
例如
list<Student> stu=new list<Student>();
stu(1).name;
希望你能明白
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved