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