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

如何通过变量动态从Select函数获取类实例的属性值?

动态获取类实例的多个属性值解决方案

嘿,这个需求太合理了——重复写Select确实冗余!我给你两种实用的实现思路,分别适配不同的场景:

一、类型安全的委托方式(推荐提前知道属性列表的场景)

这种方式用Func<Fighter, T>委托封装属性选择逻辑,既能避免重复代码,又能保留编译时类型检查,性能也更优。

首先先修正你代码里的小问题(比如类的属性定义、数组初始化语法),然后看示例:

public class Fighter 
{ 
    public string Name { get; set; } 
    public double Height { get; set; }
    public int Weight { get; set; } // 补充你原代码中缺失的Weight属性
}

// 推荐用List代替数组,初始化更灵活
var roster = new List<Fighter>
{
    new Fighter { Name = "Rocky", Height = 1.78, Weight = 72 },
    new Fighter { Name = "Apollo", Height = 1.85, Weight = 80 },
    new Fighter { Name = "Drago", Height = 1.98, Weight = 105 }
};

// 把要提取的属性都封装成委托集合
var propertySelectors = new List<Func<Fighter, object>>
{
    fighter => fighter.Name,
    fighter => fighter.Height,
    fighter => fighter.Weight
};

// 循环遍历每个委托,批量获取属性值
foreach (var selector in propertySelectors)
{
    var propertyValues = roster.Select(selector).ToArray();
    // 这里可以根据需求处理结果,比如打印、存储
    Console.WriteLine($"属性值集合:{string.Join(", ", propertyValues)}");
}

优点:

  • 编译时就能发现属性名拼写错误,类型安全
  • 性能比反射好,适合固定属性列表的场景

二、反射方式(适合动态属性名场景)

如果你的属性列表是动态的(比如从配置文件读取、用户输入的属性名),反射是更灵活的选择,不需要提前写死属性选择逻辑:

// 假设属性名是动态获取的(比如从配置、数据库读取)
var targetPropertyNames = new List<string> { "Name", "Height", "Weight" };

foreach (var propName in targetPropertyNames)
{
    // 获取属性的元数据信息
    var propertyInfo = typeof(Fighter).GetProperty(propName);
    if (propertyInfo == null)
    {
        Console.WriteLine($"不存在名为{propName}的属性");
        continue;
    }

    // 反射获取每个实例的属性值
    var propertyValues = roster.Select(fighter => propertyInfo.GetValue(fighter)).ToArray();
    Console.WriteLine($"{propName}属性值:{string.Join(", ", propertyValues)}");
}

注意点:

  • 没有编译时检查,属性名拼写错误会在运行时暴露
  • 性能略低于委托方式,适合动态属性的场景

最后补充下你原代码里的两个小问题:

  1. 数组初始化语法错误:fighter[] roster[5] = new fighter(); 应该改成 fighter[] roster = new fighter[5]; 或者用List<Fighter>更方便
  2. Fighter类中缺少Weight属性,需要补充定义才能正常使用

内容的提问来源于stack exchange,提问作者daddy-o

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:20:17