IComparable <>作为通用约束有何特别之处

sri*_*rni 0 .net c# generics generic-constraints

假设我有一堂课

Class Apple<T> where T: IComparable<int>{}
Run Code Online (Sandbox Code Playgroud)

现在,在为Apple创建对象时,我会像

Apple<int> obj = new Apple<int>();
Run Code Online (Sandbox Code Playgroud)

上面的代码将起作用。

如果我将相同的代码替换为其他通用接口(例如)IComparer<>IEnumerable<>则上述对象创建将无法正常工作,我们必须像这样声明它

Apple<IEnumerable<int>> obj = new Apple<IEnumerable<int>>();
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?为什么我声明的IComparable<>方法仅适用于它,而不适用于其他任何接口?

Him*_*ere 6

本身也没有什么特别的IComparable<T>,但也可以实现。但是肯定不会执行。TintIComparable<int>intIEnumerable<int>

或者换句话说:你当然可以比较每一个int与另一个int。然而,你不容重复int