我正在尋找一種方法將屬性本身傳遞給一個函數。不是財產的價值。函數事先不知道哪些屬性將用於排序。在這個例子中最簡單的方法是:用不同的參數類型創建4個覆蓋。其他方式是使用typeof()
裏面的函數。當Class1擁有數百個屬性時,這兩種方式都是不可接受的。到目前爲止,我發現下面的方法:傳遞屬性本身作爲參數在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");
}
傳遞字符串處理函數時,我不喜歡,因爲「人爲失誤」的風險的這種方法。當字符串由其他部分代碼生成時,這會變得更加難看。 請提出更優雅的方式來實現Class1屬性的傳遞以進行進一步處理。使用恕我直言的最佳選擇將是(或類似的東西):
vehicles = sortBy(vehicles, Class1.maxSpeed);
哪個.NET版本? – alf
首先如何選擇用於排序的屬性? – arootbeer
版本.NET 4.0 –