Czy można utworzyć metodę rozszerzenia, aby zwrócić pojedynczą właściwość lub pole na liście obiektów?Jak zebrać jedną właściwość na liście obiektów?
Obecnie mam wiele funkcji, takich jak następujące.
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;
}
To jest "zakodowane na sztywno" i obsługuje tylko jedną właściwość w typie pojedynczego obiektu. Jest żmudny i jestem pewien, że istnieje sposób użycia LINQ/Reflection do stworzenia metody rozszerzenia, która może to zrobić w sposób ogólny i wielokrotnego użytku. Coś takiego:
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;
}
Oprócz najprostszej metody przy użyciu LINQ, szukam również najszybszej metody. Czy jest możliwe użycie generowania kodu (i drzewek wyrażeń Lambda) do stworzenia takiej metody w czasie wykonywania? Jestem pewien, że byłoby to szybsze niż użycie Reflection.
Funkcję można zapisać jako "ruchy. Wybierz (ruch => ruch.speed)". Nie jest to generyczne, ale na początek jest o wiele krótsze niż pisanie i wywoływanie metody za każdym razem. – nvoigt
Tylko wywoływanie mojej metody może być szybsze. (LINQ jest zwykle wolniejszy niż kod niepoliczalny) –