如果您使用区分大小写的比较器,则仅区分大小写。你需要传递一个不敏感的比较器给基础构造器。在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