C#如何从List<HeadStruct_Table>中提取单个属性生成对应类型List<T>
实现方案
不需要将属性声明为static,你最初设想的用Func<HeadStruct_Table, T>作为入参的思路完全正确,这个入参就是属性选择器,不需要用字符串指定属性名,天然支持所有属性类型,类型安全。
你遇到的无法直接传HeadStruct_Table.colName作为参数的问题,是因为实例属性必须依附具体的类实例访问,我们只需要将属性访问逻辑封装为委托传入即可,完整实现如下:
public static IList<T> GetList<T>(List<HeadStruct_Table> list, Func<HeadStruct_Table, T> propertySelector) { var newList = new List<T>(); foreach (var item in list) { // 调用传入的委托即可拿到对应属性的值 T value = propertySelector(item); newList.Add(value); } return newList; }
如果引入LINQ可以进一步简化实现:
using System.Linq; public static IList<T> GetList<T>(List<HeadStruct_Table> list, Func<HeadStruct_Table, T> propertySelector) { return list.Select(propertySelector).ToList(); }
调用示例
- 提取所有
colName属性,返回List<string>:
List<string> colNameList = GetList(yourOriginalList, x => x.colName);
- 提取所有
Table_ID属性,返回List<int>:
List<int> tableIdList = GetList(yourOriginalList, x => x.Table_ID);
- 提取所有
cBox属性,返回List<CheckBox>:
List<CheckBox> cBoxList = GetList(yourOriginalList, x => x.cBox);
实际上你也可以不用单独封装这个方法,直接用LINQ原生的Select+ToList就能实现完全一致的效果:
List<string> colNameList = yourOriginalList.Select(x => x.colName).ToList();
提问优化建议
- 本次提问的信息完整度已经很高,提供了类定义、自身尝试思路、明确的约束条件(不使用字符串作为属性入参),其他开发者可以快速理解需求
- 后续如果遇到报错类问题,可以补充对应的错误堆栈、运行环境(.NET版本、项目类型等),可以进一步提升问题定位效率
内容的提问来源于stack exchange,提问作者Envyy
相关产品推荐
相关产品推荐

