演算子 '==' を 'T' と 'T' 型のオペランドに適用することはできません の対策方法です
ジェネリクスメソッドを書いていて比較をしたいときに
static bool Compare<T>(T a, T b) { return a == b;}
このように書いたりしませんか?
しかしこの場合は
「演算子 '==' を 'T' と 'T' 型のオペランドに適用することはできません」というおよそ日本語とは思えないエラーメッセージが表示されます。
要するに型がわからないんですね。
ではわかるようにしてあげましょう。
一般的な方法として以下の2つをご紹介します。どちらを使っても結果は同じものになります。
①
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()
を使って比較を行いましょう。