如何比较泛型类型的值?
我已将其减少到最小样本:
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
),我们仍然不能应用任何运算符<
、>
、<=
、>=
或. (我知道涉及and的解决方法,但它对关系运算符没有帮助)。==
!=
Equals()
==
!=
所以,两个问题:
- 为什么我们会观察到这种奇怪的行为?是什么让我们无法比较已知的泛型类型的值
IComparable
?它不是以某种方式破坏了通用约束的全部目的吗? - 我该如何解决这个问题,或者至少解决它?
(我意识到已经有一些与这个看似简单的问题相关的问题 - 但没有一个线程给出详尽或可行的答案,所以在这里。)