Estoy buscando un método para pasar la propiedad a una función. No es el valor de la 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 typeof()
dentro de la función. Ambas formas son inaceptables cuando Class1 tiene cientos de propiedades. Hasta ahora encontré el siguiente método:Pase la propiedad en sí para funcionar como parámetro en C#
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 la cadena a la función de procesamiento. Cuando la cadena es generada por otra parte del código, esto será aún más feo. Por favor, sugiera una forma más elegante de implementar el paso de la propiedad de Clase 1 para funcionar para un procesamiento posterior. La mejor opción para el uso IMHO será (o algo como esto):
vehicles = sortBy(vehicles, Class1.maxSpeed);
Qué versión .NET? – alf
¿Cómo se usa la propiedad que se utilizará para la selección seleccionada en primer lugar? – arootbeer
versión .NET 4.0 –