ジェネリック型の値を比較するにはどうすればよいですか?
私はそれを最小限のサンプルに減らしました:
public class Foo<T> where T : IComparable
{
private T _minimumValue = default(T);
public bool IsInRange(T value)
{
return (value >= _minimumValue); // <-- Error here
}
}
エラーは次のとおりです。
演算子'>='は、タイプ'T'および'T'のオペランドには適用できません。
一体全体!?T
はすでにに制約されてIComparable
おり、値型()に制約されている場合でも、演算子where T: struct
、、、、、またはを適用することはできません。(とに関連する回避策が存在することは知っていますが、関係演算子には役立ちません)。<
>
<=
>=
==
!=
Equals()
==
!=
したがって、2つの質問:
- なぜこの奇妙な行動を観察するのですか?既知のジェネリック型の値を比較できない理由は何ですか
IComparable
?それはどういうわけか一般的な制約の目的全体を打ち負かしませんか? - これを解決するにはどうすればよいですか、または少なくとも回避するにはどうすればよいですか?
(この一見単純な問題に関連する質問がすでにいくつかあることを認識していますが、どのスレッドも網羅的または実行可能な答えを提供していないので、ここにあります。)