如何比较泛型类型的值?
我把它减少到最小的样本:
public class Foo<T> where T : IComparable
{
private T _minimumValue = default(T);
public bool IsInRange(T value)
{
return (value >= _minimumValue); // <-- Error here
}
}
Run Code Online (Sandbox Code Playgroud)
错误是:
运算符'> ='不能应用于'T'和'T'类型的操作数.
到底怎么回事!?T已被约束到IComparable,甚至它限制值类型(的时候where T: struct),我们仍然不能将任何运营商<,>,<=,>=,==或!=.(我知道,涉及到解决方法Equals()的存在==和!=,但它并不能帮助对于关系运算符).
那么,有两个问题:
IComparable?它不是以某种方式打败了通用约束的整个目的吗?(我意识到已经有一些问题与这个看似简单的问题有关 - 但没有一个线程能给出详尽或可行的答案,所以在这里.)
我绝对不能硬编码数据类型.我需要严格的数据输入.我必须使用TValue a <= TValue b.再一次,绝对没有办法去做(双)a.这是基本库实现的一部分.关于泛型值的唯一具体事情是它们是静态类型.IComparable和其他接口似乎不起作用.