オブジェクトのリスト内の単一のプロパティまたはフィールドを返す拡張メソッドを作成することは可能ですか?
現在、私は次のような多くの機能を持っています。
public static List<int> GetSpeeds(this List<ObjectMotion> motions) {
List<int> speeds = new List<int>();
foreach (ObjectMotion motion in motions) {
speeds.Add(motion.Speed);
}
return speeds;
}
これは「ハード コード」されており、1 つのオブジェクト タイプで 1 つのプロパティのみを提供します。退屈で、LINQ / Reflection を使用して、これを一般的で再利用可能な方法で実行できる拡張メソッドを作成する方法があると確信しています。このようなもの:
public static List<TProp> GetProperties<T, TProp>(this List<T> objects, Property prop){
List<TProp> props = new List<TProp>();
foreach (ObjectMotion obj in objects) {
props.Add(obj.prop??);
}
return props;
}
LINQ を使用した最も簡単な方法とは別に、最速の方法も探しています。コード生成 (および Lambda 式ツリー) を使用して、実行時にそのようなメソッドを作成することは可能ですか? Reflectionを使用するよりも高速になると確信しています。