Dictionary < TKey,TValue > 是一個泛型集合,它以不特定的順序存儲鍵值對。
Dictionary<TKey, TValue> 存儲鍵值對。
屬于System.Collection.Generic命名空間。
實現(xiàn) IDictionary <TKey,TValue>接口。
鍵必須是唯一的,不能為null。
值可以為null或重復。
可以通過在索引器中傳遞相關鍵來訪問值,例如 myDictionary[key]
元素存儲為 KeyValuePair <TKey,TValue> 對象。
您可以通過傳遞Dictionary<TKey,TValue>對象來創(chuàng)建它可以存儲的鍵和值的類型。下面的示例演示如何創(chuàng)建字典和添加鍵值對。
IDictionary<int, string> numberNames = new Dictionary<int, string>();
numberNames.Add(1,"One"); //使用Add()方法添加鍵/值
numberNames.Add(2,"Two");
numberNames.Add(3,"Three");
//以下引發(fā)運行時異常:key already added.。
//numberNames.Add(3, "Three");
foreach(KeyValuePair<int, string> kvp in numberNames)
Console.WriteLine("Key: {0}, Value: {1}", kvp.Key, kvp.Value);
//使用collection-initializer語法創(chuàng)建字典
var cities = new Dictionary<string, string>(){
{"UK", "London, Manchester, Birmingham"},
{"USA", "Chicago, New York, Washington"},
{"India", "Mumbai, New Delhi, Pune"}
};
foreach(var kvp in cities)
Console.WriteLine("Key: {0}, Value: {1}", kvp.Key, kvp.Value);在上面的示例中,numberNames 是 Dictionary<int,string>類型的字典,因此它可以存儲int鍵和字符串值。同樣,cities 是一個 Dictionary<string,string> 類型的字典,因此它可以存儲字符串鍵和字符串值。字典不能包含重復鍵 或 null鍵,而值可以是重復鍵或null鍵。鍵必須是唯一的,否則將引發(fā)運行時異常。
可以使用索引器訪問字典。指定鍵以獲取關聯(lián)值。還可以使用 ElementAt()方法從指定的索引中獲取 KeyValuePair 。
var cities = new Dictionary<string, string>(){
{"UK", "London, Manchester, Birmingham"},
{"USA", "Chicago, New York, Washington"},
{"India", "Mumbai, New Delhi, Pune"}
};
Console.WriteLine(cities["UK"]); //打印 UK 鍵值
Console.WriteLine(cities["USA"]);//打印 USA 鍵值
//Console.WriteLine(cities["France"]); // 運行時異常:run-time exception: Key does not exist
//使用ContainsKey()檢查未知鍵
if(cities.ContainsKey("France")){
Console.WriteLine(cities["France"]);
}
//使用TryGetValue()獲取未知鍵的值
string result;
if(cities.TryGetValue("France", out result))
{
Console.WriteLine(result);
}
//使用ElementAt()通過索引檢索鍵值對
for (int i = 0; i < cities.Count; i++)
{
Console.WriteLine("Key: {0}, Value: {1}", cities.ElementAt(i).Key, cities.ElementAt(i).Value);
}通過在索引器中指定鍵來更新鍵的值。如果字典中不存在鍵,它將拋出KeyNotFoundException,因此在訪問未知鍵之前使用ContainsKey()方法
var cities = new Dictionary<string, string>(){
{"UK", "London, Manchester, Birmingham"},
{"USA", "Chicago, New York, Washington"},
{"India", "Mumbai, New Delhi, Pune"}
};
cities["UK"] = "Liverpool, Bristol"; //更新 UK 鍵的值
cities["USA"] = "Los Angeles, Boston"; //更新 USA 鍵的值
//cities["France"] = "Paris"; //引發(fā)運行時異常:KeyNotFoundException
if(cities.ContainsKey("France")){
cities["France"] = "Paris";
}Remove()方法從字典中刪除現(xiàn)有的鍵值對。Clear()方法刪除字典中的所有元素。
var cities = new Dictionary<string, string>(){
{"UK", "London, Manchester, Birmingham"},
{"USA", "Chicago, New York, Washington"},
{"India", "Mumbai, New Delhi, Pune"}
};
cities.Remove("UK"); // 刪除 UK
//cities.Remove("France"); //引發(fā)運行時異常:KeyNotFoundException
if(cities.ContainsKey("France")){ // 取出鍵之前先檢查一下
cities.Remove("France");
}
cities.Clear(); //刪除所有元素下圖說明了泛型Dictionary類的層次結(jié)構(gòu)。

可在docs.microsoft.com上了解字典方法和屬性。