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)
你的类型实现IComparable<Parent>而不是IComparable<Child>.正如排序的MSDN文档所说,如果"默认比较器Comparer(T).Default找不到IComparable(T)通用接口的实现或类型T的IComparable接口,它将抛出InvalidOperationException" 事实上它不可能,T是Child.如果您尝试制作它,List<Parent>您可能会发现它很好.
编辑:或者(最好是IMO)实现IComparable<Child>.目前还不清楚孩子是否可以明智地与另一个孩子进行比较.实施IComparable<Child>- 即使该实施只是遵循基础实施 - 宣传可比性.