gpt4 book ai didi

c# - 我对 IComparable 和集合排序方法有疑问

转载 作者:太空狗 更新时间:2023-10-29 20:06:42 24 4
gpt4 key购买 nike

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

class Parent : IComparable<Parent> 
class Child : Parent

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

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

List<Child> l = new List<Child>();
l.Add(b);
l.Add(a);
l.Sort();

尽管出现 InvalidOperationException,但上述操作失败了。有人可以解释为什么当子类确实实现了 IComparable 接口(interface)时这种类型不起作用,或者至少在我看来是这样。

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

 public int CompareTo(IDType other)
{
return this.Name.ToString().CompareTo(other.ToString());
}

最佳答案

您的类型实现 IComparable<Parent>而不是 IComparable<Child> .作为MSDN docs for Sort例如,如果“默认比较器 Comparer(T).Default 找不到 IComparable(T) 泛型接口(interface)或类型 T 的 IComparable 接口(interface)的实现”,它将抛出 InvalidOperationException。事实上它不能,T 是 Child。如果您尝试将其设为 List<Parent>您可能会发现它很好。

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

关于c# - 我对 IComparable 和集合排序方法有疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/503898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com