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
相关产品推荐
相关产品推荐

