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

如何通过字符串形式的变量名获取对应变量的值?

解决方案:通过反射动态获取字段值

你可以用反射实现这个需求,不用预先指定字段类型,核心思路是先拿到字段的元数据,再动态获取值:

核心代码

// 根据字符串获取对应的字段信息
FieldInfo targetField = this.GetType().GetField(str);
if (targetField != null)
{
    // 获取字段值,返回object类型,适配任意字段类型
    object fieldValue = targetField.GetValue(this);
    // 这里可以根据业务需求处理fieldValue,比如打印、转换类型等
    Console.WriteLine(fieldValue);
}

针对不同类型的后续处理

如果需要对不同类型的值做特定操作,用类型判断或者模式匹配就行:

object fieldValue = targetField.GetValue(this);
switch (fieldValue)
{
    case int intVal:
        // 处理int类型的逻辑,比如做数值运算
        Console.WriteLine($"整数值:{intVal + 5}");
        break;
    case double doubleVal:
        // 处理double类型的逻辑
        Console.WriteLine($"浮点数值:{doubleVal * 2}");
        break;
    case string strVal:
        // 处理字符串类型的逻辑
        Console.WriteLine($"字符串值:{strVal.ToUpper()}");
        break;
    // 其他类型可以继续加case
}

简化的动态使用(C# 4.0及以上)

要是不需要强类型校验,直接用dynamic类型更省事,运行时会自动适配类型:

dynamic fieldValue = targetField.GetValue(this);
// 直接用fieldValue做操作,比如数值运算、字符串拼接都能自动处理
Console.WriteLine(fieldValue + 10);

注意点

  • 你的字段是public的,所以GetField直接传名字就行;如果是私有字段,要加参数:GetField(str, BindingFlags.NonPublic | BindingFlags.Instance)
  • 一定要加targetField != null的判断,避免字段不存在时报空引用异常

内容的提问来源于stack exchange,提问作者another J.Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:46:14