プロパティ自体を関数に渡すメソッドを探しています。プロパティの値ではありません。関数は、どのプロパティがソートに使用されるかを事前に知りません。この例で最も簡単な方法は、異なるパラメータータイプで4つの上書きを作成することです。もう1つの方法は、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プロパティの受け渡しを実装するためのより洗練された方法を提案してください。IMHOを使用するための最良のオプションは次のとおりです(またはこのようなもの):
vehicles = sortBy(vehicles, Class1.maxSpeed);