Сравнение для сортировки разными способами

У меня есть класс, реализующий IComparable. Это работает, но сравнение является статическим, т. е. это всегда тот же самый порядок, который достигается. Какой был бы хороший способ ввести сравнение по параметру, т.е. если у нас есть:

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

Я хочу упорядочить список относительно 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);

Но на самом деле это не лучший способ. Критика приветствуется.


person Konrad Viltersten    schedule 13.04.2014    source источник
comment
так что ты хочешь на самом деле? вы хотите упростить это? или вы хотите, чтобы решение обрабатывало ситуацию, когда у вас есть больше параметров и условий для сортировки?   -  person Selman Genç    schedule 14.04.2014
comment
возможный дубликат C# - Как реализовать несколько компараторов для класса IComparable‹T›?   -  person qqbenq    schedule 14.04.2014


Ответы (1)


Если вы хотите упростить это утверждение, вы можете написать его так:

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

Кстати, метод Sort изменяет ваш список, он ничего не возвращает. Поэтому вам не нужно назначать его обратно в свой список.

person Selman Genç    schedule 13.04.2014
comment
Я просто хочу знать, является ли выбранный мной подход оптимальным. Из вашего ответа я так понимаю. Спасибо за замечание об изменчивости. :) - person Konrad Viltersten; 14.04.2014