プロパティ自体を関数に渡すメソッドを探しています。プロパティの値ではありません。関数は、どのプロパティがソートに使用されるかを事前に知っていません。この例の最も簡単な方法は、異なるパラメータタイプで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プロパティの引き渡しをさらに処理するために機能させるために、より洗練された方法を提案してください。使用方法の最良の選択肢は次のようなものです(0120)。
vehicles = sortBy(vehicles, Class1.maxSpeed);
.NETバージョン? – alf
ソートに使用するプロパティは、最初にどのように選択されていますか? – arootbeer
version .NET 4.0 –