Unity C#:无需字典或ref将字符串转为参数名并修改变量值
解决方案:通过反射实现字符串变量名修改字段值
直接利用C#的反射机制就能实现需求,不需要字典或ref关键字。以下是完整的实现代码:
using System.Reflection; using UnityEngine; public class Example : MonoBehaviour { bool boolean; void Start() { boolean = false; Debug.Log("Before change = " + boolean); changeBool("boolean"); Debug.Log("After change = " + boolean); // 输出true } void changeBool(string variableName) { // 获取当前类实例的字段信息,匹配非公共实例字段 FieldInfo field = GetType().GetField(variableName, BindingFlags.Instance | BindingFlags.NonPublic); if (field != null && field.FieldType == typeof(bool)) { // 修改字段值为true field.SetValue(this, true); } } }
关键说明:
- 使用
GetType().GetField()根据字符串名称获取字段,通过BindingFlags指定要查找的字段范围(这里是当前实例的非公共字段) - 先做非空和类型校验,避免空引用或类型不匹配的错误
- 调用
field.SetValue(this, true)直接修改目标字段的值
注意事项:
- 反射存在一定性能开销,高频调用场景谨慎使用
- 字段名称区分大小写,必须完全匹配
- 如果字段是公共的,可以移除
BindingFlags.NonPublic参数
内容的提问来源于stack exchange,提问作者Bled Wolf
相关产品推荐
相关产品推荐

