次の[c#]コードはコンパイルできません。 "演算子==は 'T'と 'T'型のオペランドには適用できません。ジェネリッククラスは、入力パラメータとオブジェクトが同じ型を持つように制約するメソッドです。T
public class Widget<T> where T: IComparable
{
public T value;
public Widget(T input) { value = input; }
public bool Equals<T>(Widget<T> w) where T : System.IComparable
{
return (w.value == value);
}
}
オブジェクトは、それらが互いに比較し、コンパイラエラーをなくすことができる保証こうして比較されるものと同じタイプTであるとWの入力パラメータの型Tを制約する方法はありますか?以下のように値の前に(動的)を使用すると、それはコンパイルすることができますが、コンパイル時に問題をキャッチするだろうより良い方法があるだろうと同じようには思えた:
public bool Equals<T>(Widget<T> w) where T : System.IComparable { return (w.value == (dynamic) value); }
*正確に '=='をチェックしますか?参照平等?価値の平等? –