C#의 HybridDictionary는 System.Collections.Specialized 네임스페이스에 속한 특수 컬렉션입니다. 저장되는 키-값 쌍이 적을 때는 ListDictionary처럼 가볍게 동작하다가, 항목이 일정 개수 이상 늘어나면 내부적으로 Hashtable로 전환되어 성능을 유지합니다.
빈 HybridDictionary를 생성하면서 대소문자 구분 여부까지 함께 지정하려면 생성자에 bool 값을 인자로 전달하면 됩니다. true를 넣으면 대소문자를 구분하고, false를 넣으면 대소문자를 구분하지 않습니다.
예제 1: 대소문자를 구분하지 않는 HybridDictionary
생성자에 false를 전달하면 대소문자를 구분하지 않는 빈 HybridDictionary가 만들어집니다.
using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
public static void Main() {
HybridDictionary dict = new HybridDictionary(false);
dict.Add("A", "AB");
dict.Add("B", "BC");
dict.Add("C", "DE");
dict.Add("D", "de");
Console.WriteLine("Key/Value pairs...");
foreach(DictionaryEntry de in dict)
Console.WriteLine("Key = " + de.Key + ", Value = " + de.Value);
}
}실행 결과
Key/Value pairs... Key = A, Value = AB Key = B, Value = BC Key = C, Value = DE Key = D, Value = de
예제 2: 대소문자를 구분하는 HybridDictionary
이번에는 생성자에 true를 전달하여 대소문자를 구분하는 빈 HybridDictionary를 만든 뒤, 여러 키-값 쌍을 추가해 보겠습니다.
using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
public static void Main() {
HybridDictionary dict = new HybridDictionary(true);
dict.Add("A", "AB");
dict.Add("B", "BC");
dict.Add("C", "DE");
dict.Add("D", "de");
dict.Add("e", "FG");
dict.Add("F", "gh");
Console.WriteLine("Key/Value pairs...");
foreach(DictionaryEntry de in dict)
Console.WriteLine("Key = " + de.Key + ", Value = " + de.Value);
}
}실행 결과
Key/Value pairs... Key = A, Value = AB Key = B, Value = BC Key = C, Value = DE Key = D, Value = de Key = e, Value = FG Key = F, Value = gh
정리
대소문자 구분 옵션은 키가 문자열일 때 특히 중요합니다. true로 설정한 사전에서는 "C"와 "c"가 서로 다른 키로 취급되어 둘 다 등록할 수 있지만, false로 설정하면 두 키가 동일한 것으로 간주됩니다. 따라서 이미 존재하는 키와 대소문자만 다른 키를 다시 추가하려 하면 ArgumentException이 발생할 수 있으니, 프로젝트의 요구 사항에 맞게 생성자의 bool 인자를 신중하게 선택하는 것이 좋습니다.