如何通过字符串形式的变量名获取对应变量的值?
解决方案:通过反射动态获取字段值
你可以用反射实现这个需求,不用预先指定字段类型,核心思路是先拿到字段的元数据,再动态获取值:
核心代码
// 根据字符串获取对应的字段信息 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
相关产品推荐
相关产品推荐

