Передайте само свойство в качестве параметра в C #
Я ищу метод для передачи самого свойства в функцию. Не стоимость имущества. Функция заранее не знает, какое свойство будет использовано для сортировки. Простейший способ в этом примере: создание 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);