通用类型比较

时间:2014-05-19 17:01:24

标签: c# generics comparison

我有两个通用类型T的对象。

T x , T y

我希望能够进行比较,如:

if (x >= y)

因此,在添加约束compareTo之前,我尝试使用缺少的where T:IComparable方法。只有这样才能在智慧中看到它。

不确定为什么我才会在写之前看到它。

1 个答案:

答案 0 :(得分:8)

  

不确定为什么我才会在写之前看到它。

因为在存在该约束之前,编译器不知道T上可用的成员,而不是object中存在的成员。你不希望能够写下来:

object x = GetObjectFromSomewhere();
object y = GetObjectFromSomewhere();
int comparison = x.CompareTo(y);
你会吗? C#是一种静态类型语言(除了dynamic) - 编译器必须知道你在使用它们时谈论的是哪些成员。

顺便说一句,如果您感兴趣的类型实现IComparable<T>而不仅仅是非泛型IComparable,那么这将是一个更好的约束。它表现更好(因为它可以避免装箱)并且它更加类型安全(因为它阻止你尝试比较不相关的类型)。