好的,所以我有一个类似于下面代码的场景,我有一个实现IComparable和子类的父类.
class Parent : IComparableclass Child : Parent Child a = new Child(); Child b = new Child(); a.CompareTo(b);
现在上面的工作正常,我可以比较两个子对象彼此没问题
Listl = new List (); l.Add(b); l.Add(a); l.Sort();
上面的失败虽然有InvalidOperationException.有人可以解释为什么当子类确实实现IComparable接口时这种类型无效,或者至少在我看来它确实如此.
好的,这是我的实际父类的CompareTo实现
public int CompareTo(IDType other) { return this.Name.ToString().CompareTo(other.ToString()); }
Jon Skeet.. 6
你的类型实现IComparable
而不是IComparable
.正如排序的MSDN文档所说,如果"默认比较器Comparer(T).Default找不到IComparable(T)通用接口的实现或类型T的IComparable接口,它将抛出InvalidOperationException" 事实上它不可能,T是Child.如果您尝试制作它,List
您可能会发现它很好.
编辑:或者(最好是IMO)实现IComparable
.目前还不清楚孩子是否可以明智地与另一个孩子进行比较.实施IComparable
- 即使该实施只是遵循基础实施 - 宣传可比性.
你的类型实现IComparable
而不是IComparable
.正如排序的MSDN文档所说,如果"默认比较器Comparer(T).Default找不到IComparable(T)通用接口的实现或类型T的IComparable接口,它将抛出InvalidOperationException" 事实上它不可能,T是Child.如果您尝试制作它,List
您可能会发现它很好.
编辑:或者(最好是IMO)实现IComparable
.目前还不清楚孩子是否可以明智地与另一个孩子进行比较.实施IComparable
- 即使该实施只是遵循基础实施 - 宣传可比性.