2014-05-01 28 views
2

我的理解是,默認情況下,Dictionary中的鍵檢查區分大小寫,但至少在我的軟件中顯示的情況並非如此。爲了得到TryGetValue區分大小寫的重點檢查和包含,我必須構建我的解釋如下:默認情況下,爲什麼我的字典<字符串,字符串>不區分大小寫?

Dictionary<string, string> a = new Dictionary<string,string>(StringComparer.Ordinal); 

所以,是我錯了嗎?字典默認情況下是不區分大小寫的?

+0

不能準確記住,但它是要麼Add和ContainsKey不是,反之亦然。無論哪種方式,這是非常惱人的... –

+4

@TonyHopkinson:我真的不認爲是這樣。 –

+0

答案是因爲我是個白癡。感謝您的回覆,我爲浪費您的時間表示歉意。將刪除問題:p。 – Robinson

回答

6

不,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用於檢查是否找到了密鑰aA。只有前者是。
  • 然後,Add用於添加密鑰A。它不會抱怨,即它不認爲該密鑰已經存在。
  • 最後,Count用於檢查字典條目的總數,它正確輸出2,即Aa
+0

+1對'正確'。我假設我可以信任'Count'屬性;)。 – Silvermind

+1

通用字典是泛型的,沒有'string'或object'的任何其他後代的特殊情況,但'string'確實有'bool Equals(object)'和'int GetHashCode( )'。 – Jodrell

+0

@Jodrell:當然,我澄清了措辭(特別提到'Dictionary '開頭),因爲在這個問題中只考慮了'string'-keyed字典。 –

相關問題