Передать свойство как параметр в 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 в функцию для дальнейшей обработки. ИМХО лучший вариант использования будет (или что-то вроде этого):

vehicles = sortBy(vehicles, Class1.maxSpeed);
39
задан Benjamin 5 December 2013 в 23:46
поделиться