如何比较泛型类型的值?
我将其简化为最小样本:
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()存在,但对关系运算符没有帮助)。==``!=
T
IComparable
where T: struct
<
>
<=
>=
==
!=
Equals()
==``!=
因此,有两个问题:
(我意识到已经有一些问题与这个看似简单的问题有关,但是没有一个线程给出详尽或可行的答案,所以在这里。)
IComparable不会使>=运算符超载。你应该用
value.CompareTo(_minimumValue) >= 0