Passe a própria propriedade para funcionar como parâmetro em C #

Eu estou procurando um método para passar a própria propriedade para uma função. Não valor da propriedade. A função não sabe antecipadamente qual propriedade será usada para classificação. A maneira mais simples neste exemplo é: criar 4 sobrescreve com diferentes tipos de parâmetros. Outra maneira é usar detypeof() dentro da função. Ambas as formas são inaceitáveis ​​quando o Class1 possui centenas de propriedades. Até agora eu encontrei o seguinte 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");
}

Eu não gosto deste método por causa do risco de "erro humano" ao passar string para a função de processamento. Quando a string é gerada por outra parte do código, isso será ainda mais feio. Por favor, sugira uma maneira mais elegante de implementar a passagem da propriedade Class1 para funcionar para processamento adicional. A melhor opção para uso IMHO será (ou algo assim):

vehicles = sortBy(vehicles, Class1.maxSpeed);

questionAnswers(6)

yourAnswerToTheQuestion