Übergeben Sie die Eigenschaft selbst, um als Parameter in C # zu fungieren.

Ich suche nach einer Methode, um die Eigenschaft selbst an eine Funktion zu übergeben. Kein Wert des Eigentums. Die Funktion weiß nicht im Voraus, welche Eigenschaft zum Sortieren verwendet wird. Der einfachste Weg in diesem Beispiel ist: Erstellen von 4 Überschreibungen mit verschiedenen Parametertypen. Ein anderer Weg ist die Verwendung vontypeof() innere Funktion. Beide Möglichkeiten sind nicht akzeptabel, wenn Class1 über Hunderte von Eigenschaften verfügt. Bisher habe ich folgende Methode gefunden:

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

Ich mag diese Methode nicht, weil das Risiko eines "menschlichen Fehlers" besteht, wenn der String an die Verarbeitungsfunktion übergeben wird. Wenn die Zeichenfolge von einem anderen Teil des Codes generiert wird, wird dies noch hässlicher. Schlagen Sie bitte eine elegantere Methode vor, um die Übergabe der Class1-Eigenschaft für die weitere Verarbeitung zu implementieren. Die beste Option für die Nutzung von IMHO ist (oder so ähnlich):

vehicles = sortBy(vehicles, Class1.maxSpeed);

Antworten auf die Frage(6)

Ihre Antwort auf die Frage