9

我正在尝试使用List.Sort() 对对象列表进行排序,但在运行时它告诉我它无法比较数组中的元素。

无法比较数组中的两个元素

班级结构:

public abstract class Parent : IComparable<Parent> {
    public string Title;
    public Parent(string title){this.Title = title;}

    public int CompareTo(Parent other){
        return this.Title.CompareTo(other.Title);
    }
}

public class Child : Parent {
    public Child(string title):base(title){}
}

List<Child> children = GetChildren();
children.Sort(); //Fails with "Failed to compare two elements in the array."

为什么我不能比较实现的基类的子类IComparable<T>?我可能遗漏了一些东西,但我不明白为什么不应该允许这样做。

编辑:应该澄清我的目标是 .NET 3.5 (SharePoint 2010)

Edit2:.NET 3.5 是问题(见下面的答案)。

4

1 回答 1

11

我假设这是 .NET 4.0 之前的 .NET 版本;在 .NET 4.0 之后它是IComparable<in T>,并且在许多情况下应该可以正常工作 - 但这需要 4.0 中的方差变化

该列表是List<Child>- 所以排序它将尝试使用IComparable<Child>IComparable- 但这些都没有实现。您可以IComparable在该Parent级别实施,也许:

public abstract class Parent : IComparable<Parent>, IComparable {
    public string Title;
    public Parent(string title){this.Title = title;}

    int IComparable.CompareTo(object other) {
        return CompareTo((Parent)other);
    }
    public int CompareTo(Parent other){
        return this.Title.CompareTo(other.Title);
    }
}

这将通过应用相同的逻辑object

于 2013-05-15T11:39:34.773 回答