Похоже, вы пытаетесь вызвать метод Sort для List<T>
, для которого требуется делегат Comparison<T>
. Это потребует немного работы, потому что сначала вы должны определить совместимую функцию сравнения.
Первый шаг - написать функцию сравнения на основе значения CompareOptions
.
private static Comparison<Person> Create(CompareOptions opt) {
switch (opt) {
case CompareOptions.ByFirstName: (x,y) => x.FirstName.CompareTo(y.FirstName);
case CompareOptions.ByLastName: (x,y) => x.LastName.CompareTo(y.LastName);
case CompareOptions.BySalary: (x,y) => x.Salary - y.Salary;
default: throw new Exception();
}
}
По умолчанию эта функция сортируется в порядке возрастания. Если вы хотите, чтобы он был убывающим, просто отрицайте значение. Итак, теперь написание SortPeople можно сделать следующим
public static List<Person> SortPeople(
this List<Person> list,
CompareOptions opt1,
SortOrder ord) )
var original = Create(opt1);
var comp = original;
if( ord == SortOrder.Descending ) {
comp = (x,y) => -(orig(x,y));
}
list.Sort(comp);
}
РЕДАКТИРОВАТЬ
Версия, которая сделана на 100% в лямбде
public static List<Person> SortPeople(
this List<Person> list,
CompareOptions opt1,
SortOrder ord) )
list.Sort( (x,y) => {
int comp = 0;
switch (opt) {
case CompareOptions.ByFirstName: comp = x.FirstName.CompareTo(y.FirstName);
case CompareOptions.ByLastName: comp = x.LastName.CompareTo(y.LastName);
case CompareOptions.BySalary: comp = x.Salary.CompareTo(y.Salary);
default: throw new Exception();
}
if ( ord == SortOrder.Descending ) {
comp = -comp;
}
return comp;
});
}