.NET/C#中的集合類

來源:互聯網
上載者:User

用C的時候,語言只有一個數群組類型,好像沒有動態數組,要用的話需要自己構造。用C++的話,可以用STL中的vector;

用C#的時候,因為數組已經是一種參考型別,每次都需要在堆上new它,所以建立運行時動態大小的數組已經成為了可能,如下:

            int n = Int32.Parse(Console.ReadLine());
            int[] ia_test = new int[n];
            Console.WriteLine(ia_test.Length);

但是這樣子僅僅實現了初步的動態,也就是說大小可以在運行時指定,但是一旦指定,則無法改變,我們真正需要的是大小可以隨加入而變大,隨減少而變小。就跟鏈表一樣的東西。

幸好,我們有定義於System.Collections中的集合類。在1.0時代,常用的是ArrayList,Queue,Stack。並且,System.Collections 中的大多數類型在建立對象的時候不需要指定集合中儲存物件的類型,它一般可以儲存任何東西,因為它們的成員原型對System.Objects進行操作。

另外,在System.Collections.Specialized命名空間中也有一些集合類,比如ListDictionary,StringCollection,StringDictionary等等。

但是這些集合類的使用存在效能問題並且缺少型別安全!to be specific,是因為其中要涉及到不必要的裝箱,拆箱操作。於是在.NET2.0時代,就解決了這個問題,利用的是2.0新引入的泛型機制。

.NET肯定不會把舊有的機制給取消掉,畢竟要向前相容。因此,引入了一個新的命名空間:System.Collections.Generic。這次,集合類的定義,就跟普通數組一樣了,定義普通數組的時候,我們必須指定是什麼類型的數組,並且只能儲存此種類型,但是在1.0中的集合類,無法做到這個,2.0中可以啦。如:

 

List<int> MyIntList = new List<int>;

 

在System.Collections.Generic命名空間中,常用的類有:List<T>,Queue<T>,Stack<T>,Dictionary<T>等。

具體用法查手冊!!!然後關於自訂泛型文法,也並不是很複雜。。。用時再看。

 

另外,關於非泛型的.NET集合類型,有一個值得注意的方法 OfType<T> , 因為非泛型的集合類不用指定集合類型,可以包含任意類型的對象,而這個方法可以用來篩選出指定的某一種類型。比如:

 

ArrayLIst myStuff = new ArrayList();

myStuff.AddRange(new object[] { 10,30,8,500,flase,"Johnny",new Car()};

IEnumerable<int> myInts = myStuff.OfType<int>();

 

這樣,myInts 裡面就只有篩選出來的int 類型的值。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.