2014-09-24 118 views
-2

首先,我知道这个问题已被多次询问,但这些提供的解决方案并没有帮助我。至少有一个对象必须实现IComparable,IComparable实现

我有以下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上排序(对于使用“类型”两次的问题,感到抱歉)。

+2

认真考虑重命名'Type'成员,因为可能与'System.Type'命名冲突 – decPL 2014-09-24 12:22:38

+1

@Krowi - 目前还不清楚你在问什么。您的帖子不包含问题。 – user469104 2014-09-24 12:24:12

+0

@decPL:你指的是什么样的命名冲突?即使像“PartType PartType”这样的属性也可以直接与该类型“碰撞”。 – 2014-09-24 12:25:08

回答

3

IComparable不落实,只IComparable<T> ...

在您的情况,您使用的ObservableCollection<T>排序的方法似乎是希望实现这个非通用接口。 (你没有说明你如何分类!)。

如果您使用System.Linq.OrderBy扩展名,它应该只与通用接口一起工作,因为Comparer.Default有一个内部回退。

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

+0

那么为什么我需要实现两者?是否会导致一些旧的非泛型类? – Krowi 2014-09-24 13:53:04

+0

@ Krowi:看看我上面的编辑 – eFloh 2014-09-25 07:23:40

相关问题