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

C#如何通过字符串输入利用反射设置类变量值?

嗨,我懂你要做的事儿——通过字符串指定变量名来给类里的字段赋值,比如用SET_VAL("a", "value_for_a")这种方式,最后用MessageBox验证结果对吧?这用反射完全能实现,我给你拿C#举个例子(毕竟你提到MessageBox,应该是.NET环境),一步步来:

实现步骤与代码示例

1. 先定义你的基础类

先把包含目标字段的类写好,这里以简化后的a字段为例:

public class MyClass
{
    public string a; // 这里用public字段,要是用private的话后面反射要调整参数
}

2. 实现SET_VAL赋值方法

接下来写核心的SET_VAL方法,用反射找到对应字段并完成赋值:

public void SET_VAL(string fieldName, string value)
{
    // 获取当前类的Type信息
    Type currentType = this.GetType();
    // 根据字段名查找字段,BindingFlags要匹配字段的访问权限
    FieldInfo targetField = currentType.GetField(fieldName, BindingFlags.Public | BindingFlags.Instance);
    
    if (targetField != null)
    {
        // 给目标字段赋值:第一个参数是类实例(这里就是当前对象this),第二个是要赋的值
        targetField.SetValue(this, value);
    }
    else
    {
        // 没找到字段的话,可以给个提示
        MessageBox.Show($"找不到名为 {fieldName} 的字段!");
    }
}

3. 调用测试验证

现在就可以调用方法并验证结果了:

MyClass myInstance = new MyClass();
myInstance.SET_VAL("a", "value_for_a");
MessageBox.Show(myInstance.a); // 这里会弹出"value_for_a"
常见问题排查
  • 如果你的字段是private修饰的,那查找字段时要加上BindingFlags.NonPublic,代码改成:
    FieldInfo targetField = currentType.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance);
    
  • 反射是区分大小写的!比如你传的是"A"但字段名是a,就会找不到,要注意拼写一致。
  • 如果字段不是string类型,记得要做类型转换,比如字段是int的话,得把输入的value转成int再赋值,不然会抛出类型不匹配的异常。

这样就能完美实现你要的功能啦!

内容的提问来源于stack exchange,提问作者jamheadart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:58:42