オブジェクトのリスト内の単一のプロパティまたはフィールドを返す拡張メソッドを作成できますか?オブジェクトのリストで単一のプロパティを収集するにはどうすればよいですか?
現在、私は次のような多くの機能を備えています。
これはハードコードされており、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を使用する最も簡単な方法は別として、私は最速の方法も探しています。実行時にコード生成(およびラムダ式ツリー)を使用してそのようなメソッドを作成することは可能ですか?私はReflectionを使うよりも速いだろうと確信しています。
あなたの機能は "motions.Select(motion => motion.Speed)"と書くことができます。それはまったく一般的ではありませんが、始めに、毎回メソッドを記述し呼び出すよりもはるかに短いです。 – nvoigt
私のメソッドを呼び出すほうが速いかもしれません。 (通常、LINQは非汎用コードよりも遅い) –