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