我有两个通用类型T的对象。
T x , T y
我希望能够进行比较,如:
if (x >= y)
因此,在添加约束compareTo
之前,我尝试使用缺少的where T:IComparable
方法。只有这样才能在智慧中看到它。
不确定为什么我才会在写之前看到它。
答案 0 :(得分:8)
不确定为什么我才会在写之前看到它。
因为在存在该约束之前,编译器不知道T
上可用的成员,而不是object
中存在的成员。你不希望能够写下来:
object x = GetObjectFromSomewhere();
object y = GetObjectFromSomewhere();
int comparison = x.CompareTo(y);
你会吗? C#是一种静态类型语言(除了dynamic
) - 编译器必须知道你在使用它们时谈论的是哪些成员。
顺便说一句,如果您感兴趣的类型实现IComparable<T>
而不仅仅是非泛型IComparable
,那么这将是一个更好的约束。它表现更好(因为它可以避免装箱)并且它更加类型安全(因为它阻止你尝试比较不相关的类型)。