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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:45:32