我有IComparable和集合排序方法的问题

Cal*_*inR 7 .net c# generics inheritance

好的,所以我有一个类似于下面代码的场景,我有一个实现IComparable和子类的父类.

class Parent : IComparable<Parent> 
class Child : Parent

Child a = new Child();
Child b = new Child();
a.CompareTo(b);
Run Code Online (Sandbox Code Playgroud)

现在上面的工作正常,我可以比较两个子对象彼此没问题

List<Child> l = new List<Child>();
l.Add(b);
l.Add(a);
l.Sort();
Run Code Online (Sandbox Code Playgroud)

上面的失败虽然有InvalidOperationException.有人可以解释为什么当子类确实实现IComparable接口时这种类型无效,或者至少在我看来它确实如此.

好的,这是我的实际父类的CompareTo实现

 public int CompareTo(IDType other)
 {
       return this.Name.ToString().CompareTo(other.ToString());
 }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

你的类型实现IComparable<Parent>而不是IComparable<Child>.正如排序MSDN文档所说,如果"默认比较器Comparer(T).Default找不到IComparable(T)通用接口的实现或类型T的IComparable接口,它将抛出InvalidOperationException" 事实上它不可能,T是Child.如果您尝试制作它,List<Parent>您可能会发现它很好.

编辑:或者(最好是IMO)实现IComparable<Child>.目前还不清楚孩子是否可以明智地与另一个孩子进行比较.实施IComparable<Child>- 即使该实施只是遵循基础实施 - 宣传可比性.