Я ищу способ передать свойство самому функции. Не стоимость имущества. Функция не знает заранее, какое свойство будет использоваться для сортировки. Самый простой способ в этом примере: создать 4 перезаписывания с разными типами параметров. Другим способом является использование внутренней функции typeof()
. Оба эти метода неприемлемы, если Class1 обладает сотнями свойств. До сих пор я нашел следующий метод:
class Class1
{
string vehName;
int maxSpeed;
int fuelCapacity;
bool isFlying;
}
class Processor
{
List<Class1> vehicles = null;
Processor(List<Class1> input)
{
vehicles = input;
}
List<Class1> sortBy(List<Class1> toSort, string propName)
{
if (toSort != null && toSort.Count > 0)
{
return toSort.OrderBy(x => typeof(Class1).GetProperty(propName).GetValue(x, null)).ToList();
}
else return null;
}
}
class OuterUser
{
List<Class1> vehicles = new List<Class1>();
// ... fill the list
Processor pr = new Processor(vehicles);
List<Class1> sorted = pr.sortBy("maxSpeed");
}
Мне не нравится этот метод из-за риска "человеческой ошибки" при передаче строки в функцию обработки. Когда строка генерируется другой частью кода, это будет еще более уродливым. Пожалуйста, предложите более элегантный способ реализации передачи свойства Class1 для дальнейшей обработки. Лучшим вариантом использования IMHO будет (или что-то вроде этого):
vehicles = sortBy(vehicles, Class1.maxSpeed);