比较以不同方式排序

时间:2014-04-13 20:42:49

标签: c# sorting compare icomparable

我有一个实现 IComparable 的类。它有效,但比较是静态的,即它总是与它实现的排序相同。通过参数引入比较的好方法是什么,即如果我们有:

class Poo : IComparable { 
  public int A { ... };
  public int B { ... };
  ... 
}
IEnumerable<Foo> list = ...;
list = list.Sort(???);

我&#39; d喜欢按照 A B 的顺序排序列表,具体取决于在问号处传递给 Sort 的参数。最有效的方法是什么?

目前,我提出的最好的方法是声明我传递给 Sort 作为代表的几种方法。

private static int CompareWrtA(Foo foo1, Foo foo2) { ... }
private static int CompareWrtB(Foo foo1, Foo foo2) { ... }

if(withRespectToA)
  list = list.Sort(CompareWrtA);
else
  list = list.Sort(CompareWrtB);

但它并不是最好的方式。批评是受欢迎的。

1 个答案:

答案 0 :(得分:0)

如果要简化该语句,可以这样写:

list.Sort((x,y) => withRespectToA ? CompareWrtA(x,y) : CompareWrtB(x,y));

BTW,Sort方法正在修改您的列表,它不会返回任何内容。所以您不需要将其分配回列表。