在我的C#类源代码中,我想使用其他类中定义的参数值。我想这样做而不将其他类名“硬连接”到源代码中(例如,不写“class2.variable”之类的东西)。 相反,我想在运行时将其他类的名称作为字符串传递。
我在Unity中使用C#。所以我想在Unity的Inspector中将另一个类的名称设置为公共字符串。
例如,请考虑以下两个单独的脚本:
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”? 我已经尝试了两天。我已经广泛搜索了一个答案。 有人可以帮忙吗?
答案 0 :(得分:1)
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));
}