2014-05-01 4 views
2

Dictionary에서 키 검사는 기본적으로 대소 문자를 구분하지만 내 소프트웨어에서는 적어도 그렇지 않습니다. 내 사전 <string, string>이 ​​대소 문자를 구분하지 않는 이유는 무엇입니까?

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

그래서 이것에 대해 내가 잘못 다음과 같이 TryGetValue에 대한 대소 문자를 구분 키 체크를 얻고 포함하기 위해, 내 사전 구성해야? 사전은 대소 문자를 구분하지 않습니까?

+0

정확히 기억할 수는 없지만 Add was 및 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 키가 추가된다.
  • ContainsKeyaA 키가 있는지 확인하는 데 사용됩니다. 전만이 있습니다.
  • 그런 다음 Add을 사용하여 A 키를 추가합니다. 불평하지 않습니다. 즉, 키가 이미 있다고 생각하지 않습니다.
  • 결국 Count은 사전 항목의 총 수를 확인하는 데 사용되며 및 a 인 올바르게 2을 출력합니다.
+0

'+1'은 +1입니다. 나는'Count' 속성을 신뢰할 수 있다고 가정합니다.). – Silvermind

+1

일반적인 사전은 generic이며'string'이나'object'의 다른 후손은 아니지만'string'은'bool Equals (object)'와'int GetHashCode (')'. – Jodrell

+0

@ Jodrell : 사실, 'string'키가 들어있는 사전 만이 질문에서 고려되었으므로 문구를 명확하게 (처음에는 'Dictionary '을 참조하여) 명확히했습니다. –

2

일반적인 사전 생성자 IDictionary<TKey, TValue>()TKey의 인스턴스에서 제공되는 bool Equals(object obj)int GetHashCode()의 어떤 구현을 사용합니다.

string의 경우이 구현은 EqualityComparer<string>.Default이 제공하는 구현과 기능상 동일하며 이는 StringComparer.Ordinal과 동일한 기능입니다. 이 질문에 국가로


, 당신은 대안으로 사용될 것 IEqualityComparer<string> 구현을 제공하는 사전 생성자의 다른 오버로드를 사용할 수 있습니다.