我的理解是,默認情況下,Dictionary中的鍵檢查區分大小寫,但至少在我的軟件中顯示的情況並非如此。爲了得到TryGetValue區分大小寫的重點檢查和包含,我必須構建我的解釋如下:默認情況下,爲什麼我的字典<字符串,字符串>不區分大小寫?
Dictionary<string, string> a = new Dictionary<string,string>(StringComparer.Ordinal);
所以,是我錯了嗎?字典默認情況下是不區分大小寫的?
我的理解是,默認情況下,Dictionary中的鍵檢查區分大小寫,但至少在我的軟件中顯示的情況並非如此。爲了得到TryGetValue區分大小寫的重點檢查和包含,我必須構建我的解釋如下:默認情況下,爲什麼我的字典<字符串,字符串>不區分大小寫?
Dictionary<string, string> a = new Dictionary<string,string>(StringComparer.Ordinal);
所以,是我錯了嗎?字典默認情況下是不區分大小寫的?
不,Dictionary<string, string>
默認情況下不區分大小寫。
這可以用這個小應用可以容易地示出:
using System;
using System.Collections.Generic;
public class MainClass
{
public static void Main(string[] args)
{
var newDict = new Dictionary<string, string>();
newDict.Add("a", "x");
Console.WriteLine(newDict.ContainsKey("a"));
Console.WriteLine(newDict.ContainsKey("A"));
newDict.Add("A", "y");
Console.WriteLine(newDict.ContainsKey("a"));
Console.WriteLine(newDict.ContainsKey("A"));
Console.WriteLine(newDict.Count);
}
}
此輸出:
True
False
True
True
2
說明:
a
加入。ContainsKey
用於檢查是否找到了密鑰a
和A
。只有前者是。Add
用於添加密鑰A
。它不會抱怨,即它不認爲該密鑰已經存在。Count
用於檢查字典條目的總數,它正確輸出2
,即A
和a
。+1對'正確'。我假設我可以信任'Count'屬性;)。 – Silvermind
通用字典是泛型的,沒有'string'或object'的任何其他後代的特殊情況,但'string'確實有'bool Equals(object)'和'int GetHashCode( )'。 – Jodrell
@Jodrell:當然,我澄清了措辭(特別提到'Dictionary
一個通用字典構造IDictionary<TKey, TValue>()
會使用任何的bool Equals(object obj)
和int GetHashCode()
實現被提供在TKey
的實例。
對於string
該實現在功能上等同於由EqualityComparer<string>.Default
提供的實現,其功能等同於StringComparer.Ordinal
。
當您在問題的狀態,你可以使用字典構造的替代超負荷供應的IEqualityComparer<string>
實現,將被用作替代。
不能準確記住,但它是要麼Add和ContainsKey不是,反之亦然。無論哪種方式,這是非常惱人的... –
@TonyHopkinson:我真的不認爲是這樣。 –
答案是因爲我是個白癡。感謝您的回覆,我爲浪費您的時間表示歉意。將刪除問題:p。 – Robinson