如何比较泛型类型的值?
我已经把它缩小到最小样本了:
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()
的变通方法,但是对于关系操作符没有帮助)。
有两个问题:
IComparable
)的值?它难道不是在某种程度上违背了通用约束的整个目的吗?(我意识到已经有一些问题与这个看似简单的问题有关——但没有一个线程给出详尽或可行的答案,所以在这里。)