在运行时访问类的字符串名称中的值

本文关键字:字符串 访问 运行时 | 更新日期: 2023-09-27 18:28:29

在C#类的源代码中,我希望使用其他类中定义的参数值。我想在不将其他类名"硬连接"到源代码中的情况下(例如,不编写类似"class2.variable"的内容)完成此操作。相反,我希望在运行时将另一个类的名称作为字符串传递。

我在Unity中使用C#。因此,我想将另一个类的名称设置为统一检查器中的公共字符串。

例如,考虑这两个独立的脚本:

using UnityEngine ;
public class ScriptA : ScriptableObject {public static int fred = 5 ;  }

using System;
using System.Reflection; 
using UnityEngine;
public class ScriptB : MonoBehaviour {
    object item;
    private static string instance;
    void Start() {
        instance = "ScriptA";
        item = ScriptableObject.CreateInstance(Type.GetType(instance)); 
        Type myType = item.GetType();
        foreach (FieldInfo info in myType.GetFields())
        {
            string infoName = info.Name; //gets the name of the field
            Debug.Log (" info = " + infoName);  
        }
    } 
}

ScriptB工作正常;它只从字符串"instance"访问ScriptA,事实证明名称"fred"将显示在控制台中。

但是我如何获取"fred"的价值;如何使数字"5"出现在控制台上?我已经试了两天了。我到处寻找答案。有人能帮忙吗?

在运行时访问类的字符串名称中的值

FieldInfo有一个GetValue方法:

public abstract object GetValue(
    object obj
)

尝试:

Type myType = item.GetType();
foreach (FieldInfo info in myType.GetFields())
    {
        string infoName = info.Name; //gets the name of the property
        Console.WriteLine(" Field Name = " + infoName +"and value = "+ info.GetValue(null));  
    }