成语大全网 - 汉语词典 - C# Dictionary 用法;

C# Dictionary 用法;

C# Dictionary用法总结

1、用法1: 常规用

增加键值对之前需要判断是否存在该键,如果已经存在该键而且不判断,将抛出异常。所以这样每次都要进行判断,很麻烦,在备注里使用了一个扩展方法

public?static?void?DicSample1()

{

Dictionary<String,?String>?pList?=?new?Dictionary<String,?String>();

try

{

if?(pList.ContainsKey("Item1")?==?false)

{

pList.Add("Item1",?"ZheJiang");

}

if?(pList.ContainsKey("Item2")==?false)

{

pList.Add("Item2",?"ShangHai");

}

else

{

pList["Item2"]?=?"ShangHai";

}

if?(pList.ContainsKey("Item3")?==?false)

{

pList.Add("Item3",?"BeiJiang");

}

}

catch?(System.Exception?e)

{

Console.WriteLine("Error:?{0}",?e.Message);

}

//判断是否存在相应的key并显示

if?(pList.ContainsKey("Item1"))

{

Console.WriteLine("Output:?"?+?pList["Item1"]);

}

//遍历Key

foreach?(var?key?in?pList.Keys)

{

Console.WriteLine("Output?Key:?{0}",?key);

}

//遍历Value

foreach?(String?value?in?pList.Values)

{

Console.WriteLine("Output?Value:?{0}",?value);

}

//遍历Key和Value

foreach?(var?dic?in?pList)

{

Console.WriteLine("Output?Key?:?{0},?Value?:?{1}?",?dic.Key,?dic.Value);

}

} 

 

2、用法2:Dictionary的Value为一个数组

///?<summary>

///?Dictionary的Value为一个数组

///?</summary>

public?static?void?DicSample2()

{

Dictionary<String,?String[]>?dic?=?new?Dictionary<String,?String[]>();

String[]?ZheJiang?={?"Huzhou",?"HangZhou",?"TaiZhou"?};

String[]?ShangHai?=?{?"Budong",?"Buxi"?};

dic.Add("ZJ",?ZheJiang);

dic.Add("SH",?ShangHai);

Console.WriteLine("Output?:"?+?dic["ZJ"][0]);

}

3、用法3: Dictionary的Value为一个类

//Dictionary的Value为一个类

public?static?void?DicSample3()

{

Dictionary<String,?Student>?stuList?=?new?Dictionary<String,?Student>();

Student?stu?=?null;

for?(int?i?=?0;?i?<?3;?i++?)

{

stu?=?new?Student();

stu.Name?=?i.ToString();

stu.Name?=?"StuName"?+?i.ToString();

stuList.Add(i.ToString(),?stu);

}

foreach?(var?student?in?stuList)

{

Console.WriteLine("Output?:?Key?{0},?Num?:?{1},?Name?{2}",?student.Key,?student.Value.Name,?student.Value.Name);

}

}

Student类:

public?class?Student

{

public?String?Num?{?get;?set;?}

public?String?Name?{?get;?set;?}

} 4 备注:Dictionary的扩展方法使用

///?<summary>

///?Dictionary的扩展方法使用

///?</summary>

public?static?void?DicSample4()

{

//1)普通调用

Dictionary<int,?String>?dict?=?new?Dictionary<int,?String>();

DictionaryExtensionMethodClass.TryAdd(dict,?1,?"ZhangSan");

DictionaryExtensionMethodClass.TryAdd(dict,?2,?"WangWu");

DictionaryExtensionMethodClass.AddOrPeplace(dict,?3,?"WangWu");

DictionaryExtensionMethodClass.AddOrPeplace(dict,?3,?"ZhangWu");

DictionaryExtensionMethodClass.TryAdd(dict,?2,?"LiSi");

//2)TryAdd?和?AddOrReplace?这两个方法具有较强自我描述能力,用起来很省心,而且也简单:

dict.AddOrPeplace(20,?"Orange");

dict.TryAdd(21,?"Banana");

dict.TryAdd(22,?"apple");

//3)像Linq或jQuery一样连起来写

dict.TryAdd(10,?"Bob")

.TryAdd(11,?"Tom")

.AddOrPeplace(12,?"Jom");

//4)?获取值

String?F?=?"Ba";

dict.TryGetValue(31,?out?F);

Console.WriteLine("F?:?{0}",F);

foreach?(var?dic?in?dict)

{

Console.WriteLine("Output?:?Key?:?{0},?Value?:?{1}",?dic.Key,?dic.Value);

}

//5)下面是使用GetValue获取值

var?v1?=?dict.GetValue(111,null);

var?v2?=?dict.GetValue(10,"abc");

//6)批量添加

var?dict1?=?new?Dictionary<int,int>();

dict1.AddOrPeplace(3,?3);

dict1.AddOrPeplace(5,?5);

var?dict2?=?new?Dictionary<int,?int>();

dict2.AddOrPeplace(1,?1);

dict2.AddOrPeplace(4,?4);

dict2.AddRange(dict1,?false);

}

扩展方法所在的类

public?static?class?DictionaryExtensionMethodClass

{

///?<summary>

///?尝试将键和值添加到字典中:如果不存在,才添加;存在,不添加也不抛导常

///?</summary>

public?static?Dictionary<TKey,?TValue>?TryAdd<TKey,?TValue>(this?Dictionary<TKey,?TValue>?dict,?TKey?key,?TValue?value)

{

if?(dict.ContainsKey(key)?==?false)

dict.Add(key,?value);

return?dict;

}

///?<summary>

///?将键和值添加或替换到字典中:如果不存在,则添加;存在,则替换

///?</summary>

public?static?Dictionary<TKey,?TValue>?AddOrPeplace<TKey,?TValue>(this?Dictionary<TKey,?TValue>?dict,?TKey?key,?TValue?value)

{

dict[key]?=?value;

return?dict;

}

///?<summary>

///?获取与指定的键相关联的值,如果没有则返回输入的默认值

///?</summary>

public?static?TValue?GetValue<TKey,?TValue>(this?Dictionary<TKey,?TValue>?dict,?TKey?key,?TValue?defaultValue)

{

return?dict.ContainsKey(key)?dict[key]?:?defaultValue;

}

///?<summary>

///?向字典中批量添加键值对

///?</summary>

///?<param?name="replaceExisted">如果已存在,是否替换</param>

public?static?Dictionary<TKey,?TValue>?AddRange<TKey,?TValue>(this?Dictionary<TKey,?TValue>?dict,?IEnumerable<KeyValuePair<TKey,?TValue>>?values,?bool?replaceExisted)

{

foreach?(var?item?in?values)

{

if?(dict.ContainsKey(item.Key)?==?false?||?replaceExisted)

dict[item.Key]?=?item.Value;

}

return?dict;

}

}