✅
演算子 '==' を 'T' と 'T' 型のオペランドに適用することはできません
ジェネリックメソッドを書いていて困ったことはありませんか?
次のコードはコンパイルできません。
static bool Compare<T>(T a, T b)
{
return a == b;
}
「演算子 '==' を 'T' と 'T' 型のオペランドに適用することはできません」というおよそ日本語とは思えないエラーメッセージが表示されます。
型がわからないので比較ができないのです。
この場合はこうしましょう。
static bool Compare<T>(T a, T b)
{
return EqualityComparer<T>.Default.Equals(a, b);
}
また次のようにも書けます。
static bool Compare<T>(T a, T b)
{
return Comparer<T>.Default.Compare(a, b) == 0;
}
Comparer<T>.Default.Compare()
メソッドは bool
値ではなく int
値を返します。
a
が b
より小さい場合は負の値を、同じ場合は 0 を、大きい場合は正の値を返します。
しかしこれは本来並び替えに使うもので、同値比較とはニュアンスが違いますので EqualityComparer<T>.Default.Equals()
を使いましょう。
執筆日: 2018/03/22
Discussion