我正在寻找一种将属性本身传递给函数的方法。不是财产价值。函数事先并不知道将使用哪个属性进行排序。此示例中最简单的方法是:使用不同的参数类型创建 4 个覆盖。另一种方法是使用typeof()
内部函数。当 Class1 有数百个属性时,这两种方式都是不可接受的。到目前为止,我找到了以下方法:
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");
}
我不喜欢这种方法,因为在将字符串传递给处理函数时存在“人为错误”的风险。当字符串由代码的其他部分生成时,这将更加难看。请提出更优雅的方法来实现 Class1 属性的传递以进行进一步处理。使用恕我直言的最佳选择将是(或类似的东西):
vehicles = sortBy(vehicles, Class1.maxSpeed);