基本的に2つのオブジェクトでCompareToを呼び出すヘルパー関数がありますが、特別なコーナーケースのチェック、変換などを行います。
もともと私はそのように関数を書きました:
public static bool BetterCompare(IComparable lhs, IComparable rhs, out retCode)
{
...
retCode = lhs.CompareTo(rhs);
...
}
しかし、問題は、私が持っている場合ですclass AwesomeClass : IComparable<AwesomeClass>
。実際、いくつかの古いIComparable
クラスがなくなったので、私はいくつか持っていIComparable<T>
ます。しかし、コンパイラはこれらの新しいオブジェクトをに変換できないため、怒りますIComparable
。これが悪化するかどうかはわかりませんが、そのうちのいくつかは悪化していますabstract
(抽象クラスは実装を提供しますが)。
「CompareToを呼び出すことができる2つのオブジェクトが必要」を伝え、コンパイラにリップを与えないようにするにはどうすればよいですか。できれば、新しい関数はのようBetterCompare<AwesomeClass>(this, that, out retCode);
に見えるのではなく、単に「正しいことをする」必要があります。または、すべてのクラスに触れずにこれを行うためのより良い方法はあります IComparable
かIComparable<T>
?