我有一个实现 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);
但它并不是最好的方式。批评是受欢迎的。
答案 0 :(得分:0)
如果要简化该语句,可以这样写:
list.Sort((x,y) => withRespectToA ? CompareWrtA(x,y) : CompareWrtB(x,y));
BTW,Sort
方法正在修改您的列表,它不会返回任何内容。所以您不需要将其分配回列表。