是否可以创建扩展方法来返回对象列表中的单个属性或字段?
目前我有很多功能,如下所示。
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 表达式树)来创建这样的方法?我相信这会比使用反射更快。