大文字と小文字を区別する比較機能を使用する場合は、大文字と小文字が区別されます。あなたは無関係の比較演算子をベースコンストラクタに渡す必要があります。 IMO、呼び出し側が決めさせ
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;
}
}
または、ずっと良く:
public class SerializableDictionay<TKey, TValue>
: Dictionary<TKey,TValue>, IXmlSerializable
{
public SerializableDictionay() : base() {}
public SerializableDictionay(IEqualityComparer<TKey> comparer)
: base(comparer) {}
}
(及び発信者の初期化子は、目的の文字列-比較子を指定する必要があり)
C#では、このようなものになります
ありがとうMarc:Dあなたは私の夜を幸せにしました! –
@DamiánHerrera私は徹底的に最初の2番目のバージョンを好む、メモ - 少ない驚き! –