[C#.NET][VB.NET] 一般 / 泛型 Generic Collection 字典集合型別介紹
一般型別(點選連結擴充說明) | 泛型型別 |
ArrayList | List< > |
Queue | Queue< > |
Stack | Stack< > |
Hashtable | Dictionary< > |
StoredList | StoredList< > |
ListDictionary | Dictionary< > |
HybridDictionary | Dictionary< > |
OrderedDictionary | Dictionary< > |
SortedDictionary | StoredDictionary< > |
NameValueCollection | Dictionary< > |
DictionaryEntry | KeyValPair< > |
StringCollection | List<String> |
StringDictionary | Dictionary<String> |
表格左邊一般型別,大都已經學習過了,也知道大致上的類別如何使用,右邊則是對應的泛型型別,功能就跟一般型別差不多,使是用法不同罷了。為何需要泛型?假設當你需要撰寫一個功能/類別時,而你沒有辦法得知使用者會使用什麼型態的參數,有可能是string、也有可能是int,假如我們用泛型就不用擔心程式被呼叫時還要考慮傳入的型別,只要專心開發功能即可。
標準的集合,在功能上或執行的效率都有限制,System.Collections 命名空間
Hashtable | 用於包含10個或更多項目的集合,對小集合沒效率。 |
SortedList | 依索引鍵來排序項目。 |
集合類別結構
DictionaryEntry | 主要是用來取出字典集合著Key和Value,我們可以利用它來逐一處理集合中的項目。 |
集合類別介面
IDictionary | 主要是用索引鍵來存取項目,不能用索引值。 |
IComparer | 自訂排序與順序的比較 |
IEqualityComparer | 只接受相等比較,自訂排序與順序的比較是由 IComparer 介面來提供 |
比較集合
CaseInsensitiveComparer | 比較兩個物件是否相等,忽略字串的大小寫。 |
特殊的集合,彌補標準字典的限制,System.Collections.Specialized 命名空間
ListDictionary | 用於包含10個或更少項目的集合,對大集合沒效率。 |
HybridDictionary | 會先實作成ListDictionary的小集合,當內部變大時,將會把自己變成Hashtable的大集合。 |
OrderedDictionary | 比SortedList類別多了一些功能,更為強大。 |
字串集合,只能使用字串,如果你操作的對象不是物件而是字串,那這個類別絕對是你的首選,因為它可以省下轉型的動作
StringDictionary | 索引鍵與資料值均採用強式型別宣告為字串,用法跟Hashtable相似 |
StringCollection | 用法跟ArrayList相似 |
NameValueCollection | 與StringDictionary相似,差別在於NameValueCollection可以單一索引鍵對應多重值。 |
CollectionsUtil | 建立忽略字串大小寫Hashtable與SortedList的集合。 |
如何使用泛型型別,以下就以List< >類別來做說明
1.匯入命名空間 System.Collections.Generic
using System.Collections.Generic;
2.引用泛型類別
//引用泛型 List<string> myGen = new List<string>();
3.加入集合
myGen.Add("簡單"); myGen.Add("範例");
4.輸出
foreach (string i in myGen) { Console.WriteLine(i); }
泛型並不困難,使用上跟一般型別沒什麼不同,
在C#底下就用<傳入的型別>,例如:List<string> myGen = new List<string>( );
在VB子下就用(Of 傳入的型別),例如:
Dim myGen As New List(Of String),Dim myGen As List(Of String) = New List(Of String)
如何自定泛型類別
泛型類別宣告如同一般類別相似,只是宣告內容方法不一樣
1.宣告泛型類別
2.宣告泛型方法
//泛型類別宣告
public class myGeneric<T>
{
//泛型方發宣告
public void myTest(T myValue)
{
System.Type myType = myValue.GetType();
Console.WriteLine(myType);
}
}
3.引用泛型類別
myGeneric<int> myCom1 =new myGeneric<int>();
myCom1.myTest(1);
myGeneric<string> myCom2 = new myGeneric<string>();
myCom2.myTest("sdf");
myGeneric<double> myCom3 = new myGeneric<double>();
myCom3.myTest(12.2344);
不管引用任何型態,泛型類別都能照單全收,程式的重用性就大大的提昇。
範例已包含VB與C#
範例下載:泛型.rar
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET