至少有一个对象必须实现IComparable,实现IComparable

时间:2014-09-24 12:19:14

标签: c# sorting

首先,我知道这个问题已被多次询问,但这些提供的解决方案并没有帮助我。

我有以下Classes

public class PartType : IComparable<PartType>
{
    public int CompareTo(PartType other)
    {
        return this.Type.CompareTo(other.Type);
    }

    // Some code

    public int Id { get; set; }
    public string Type { get; set; }
}

以上课程使用上述课程。

public class Part : IComparable<Part>
{
    public int CompareTo(Part other)
    {
        return this.Material.CompareTo(other.Material);
    }

    public string Material { get; set; }
    public PartType Type { get; set; }
}

现在,我有一个ObservableCollection<PartType>我可以在string Type上排序没有任何问题(不需要做任何其他事情)。

我的其他ObservableCollection<Part>我可以对string Material进行排序,但不能对PartType Type进行排序(对于因使用单词类型两次而产生的混淆感到抱歉。)

1 个答案:

答案 0 :(得分:4)

IComparable未实施,仅IComparable<T> ...

在您的情况下,用于对ObservableCollection<T>进行排序的方法似乎希望实现此非泛型接口。 (你没有说明你的排序!)。

如果您使用System.Linq.OrderBy扩展程序,则它应仅适用于通用接口,因为Comparer.Default具有内部回退。

您应该始终为您的类实现通用和非通用接口,以支持与调用者是否“理解”泛型无关的常见行为。