前言:
NameValueCollection v.s Dictionary
使用起來很像的東西 其實差很大...
NameValueCollection 和 Dictionary<> 比較下表
NameValueCollection | Dictionary<,> |
---|---|
Key和Value 都是String型態 | 可用泛型來指定Key和Value型態 |
可對於未指定的Key取值 | 不能對於未指定的Key取值 (會報錯誤) |
可對於重複鍵Add值 | 不可於重複鍵Add值 |
(一)
NameValueCollection的Key和Value 只吃 string
NameValueCollection contatier = new NameValueCollection();
contatier.Add("key1", "key1");
contatier.Add("key2", "key2");
使用Dictionary可用泛型指定Key和Value的型態
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("key1", "key1");
dict.Add("key2", "key2");
(二)
Dictionary字典物件 沒有給key為dict付值 取值時會出錯
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("key1", "key1");
dict.Add("key2", "key2");
Console.WriteLine(dict["dict"]);
雖然在下面的contaier沒有給Key為dict值 但再取值時不會報錯 而是會給一個**[空字串]**
NameValueCollection contatier = new NameValueCollection();
contatier.Add("key1", "key1");
contatier.Add("key2", "key2");
Console.WriteLine(contatier["dict"]);
(三)
NameValueCollection可以使用重複Key來付值 如以下程式碼 重複add [Key]為key1 可正常運作
NameValueCollection contatier = new NameValueCollection();
contatier.Add("key1", "key1");
contatier.Add("key2", "key2");
contatier.Add("key1", "test1");
下面dict 字典物件使用如重複Key來付值會出錯 如重複add [Key]為key1 就會報錯
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("key1", "key1");
dict.Add("key2", "key2");
dict.Add("key1", "test1");
其中第二點和第三點差別須注意
可是這樣NameValueCollection如果同樣Key值要取值會取到哪個值。
如果是Dictionary因為是唯一Key值,所以一定會取到我要的值。
NameValueCollection如果同樣Key 會抓你最後add值
Dictionary因為是唯一Key值,所以一定會取到我要的值。
這句話有點怪怪的,Dictionary的key是唯一鍵,不予許重複add同樣的Key不然會出錯
NameValueCollection如果同樣Key 會抓你最後add值
若新增已存在的 Key 會將新字串以逗號區隔的方式加在原字串後方唷
且要注意 NameValueCollection 的 Key並無區分大小寫
哈哈 感謝^^
不予許重複add同樣的Key不然會出錯
這句話是沒錯啦,
如果不確定會不會重複,
可以在add之前先做判斷,
再決定要不要add.