当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《我有IComparable和集合排序方法的问题》经验,为你挑选了1个好方法。

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

class Parent : IComparable 
class Child : Parent

Child a = new Child();
Child b = new Child();
a.CompareTo(b);

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

List l = 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- 即使该实施只是遵循基础实施 - 宣传可比性.



1> Jon Skeet..:

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

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

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有