You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:06:02