是否有可能創建一個擴展方法來返回對象列表中的單個屬性或字段?如何收集對象列表中的單個屬性?
目前我有很多功能如下。
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;
}
這是「硬編碼」,只在單個對象類型中提供單個屬性。它的乏味,我敢肯定,有一種使用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更快。
你的功能可以寫成「motions.Select(motion => motion.Speed)」。這不完全是通用的,但一開始它比每次寫入和調用方法要短得多。 – nvoigt 2013-03-12 13:58:12
只調用我的方法可能會更快。 (LINQ通常比非泛型代碼慢) – 2013-03-12 13:58:56