Pasar propiedad en sí para funcionar como parámetro en C #

Estoy buscando un método para pasar la propiedad a una función. No valor de propiedad. La función no sabe de antemano qué propiedad se utilizará para la clasificación. La forma más simple en este ejemplo es: crear 4 sobrescrituras con diferentes tipos de parámetros. Otra forma es usando detypeof() dentro de la funcion Ambas formas son inaceptables cuando Class1 tiene cientos de propiedades. Hasta ahora he encontrado el siguiente método:

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");
}

No me gusta este método debido al riesgo de "error humano" al pasar una cadena a la función de procesamiento. Cuando la cadena es generada por otra parte del código, esto va a ser aún más feo. Por favor, sugiera una forma más elegante de implementar el paso de la propiedad Class1 para que funcione para su posterior procesamiento. La mejor opción de uso IMHO será (o algo como esto):

vehicles = sortBy(vehicles, Class1.maxSpeed);

Respuestas a la pregunta(6)

Su respuesta a la pregunta