如何比较泛型类型的值?
我已将其简化为最小样本:
public class Foo<T> where T : IComparable
{
private T _minimumValue = default(T);
public bool IsInRange(T value)
{
return (value >= _minimumValue); // <-- Error here
}
}
错误是:
Operator '>=' cannot be applied to operands of type 'T' and 'T'.
到底是什么!?T
已经被约束为IComparable
,即使将其约束为值类型(where T: struct
),我们仍然不能应用任何运算符<
、>
、<=
、>=
、==
或!=
.(我知道==
和!=
存在涉及Equals()
的变通方法,但对关系运算符没有帮助).
所以,有两个问题:
-
Why我们观察到这种奇怪的行为了吗?是什么阻止我们比较泛型类型的值(known比
IComparable
)?它不是以某种方式挫败了泛型约束的全部目的吗? - 我该如何解决这个问题,或者至少解决它?
(我意识到已经有一些问题与这个看似简单的问题有关——但没有一条线索给出详尽或可行的答案,所以就在这里.)