如果您使用區分大小寫的比較器,則僅區分大小寫。你需要傳遞一個不敏感的比較器給基礎構造器。在C#中,這將是這樣的:
public class SerializableDictionay<TKey, TValue>
: Dictionary<TKey,TValue>, IXmlSerializable
{
public SerializableDictionay() : base(GetComparer()) { }
static IEqualityComparer<TKey> GetComparer() {
if(typeof(TKey) == typeof(string)) {
// just one of the possibilities
return (IEqualityComparer<TKey>)(object)
StringComparer.InvariantCultureIgnoreCase;
}
return EqualityComparer<TKey>.Default;
}
}
,或者多更好IMO,讓來電者決定:
public class SerializableDictionay<TKey, TValue>
: Dictionary<TKey,TValue>, IXmlSerializable
{
public SerializableDictionay() : base() {}
public SerializableDictionay(IEqualityComparer<TKey> comparer)
: base(comparer) {}
}
(並有來電初始化指定字符串比較器所需的)
謝謝馬克:你讓我的夜晚更快樂! – 2012-02-06 06:49:41
@DamiánHerrera我非常喜歡第二個版本,注意 - 更少的驚喜! – 2012-02-06 07:01:22