如何将GetField()的结果转换为可用对象?

时间:2016-01-19 00:18:46

标签: c# reflection unity3d

在下面的代码中,班级ButtonScript有一个名为buttonObj的字段,其类型为GameObject

var button = gameObject.AddComponent<ButtonScript>();
var obj = button.GetType().GetField("buttonObj");
Debug.Log(obj); //prints UnityEngine.GameObject
Debug.Log(obj.name);  //compilation error

最后一行的错误是:

Type 'System.Reflection.FieldInfo' does not contain a definition for 'name'... 

为什么它会在记录时显示为GameObject,但在我尝试使用它时它是FieldInfo对象?

如何才能将其视为GameObject

1 个答案:

答案 0 :(得分:0)

obj变量的类型为FieldInfo而不是GameObject

FieldInfo类表示有关buttonObj字段的元数据信息。它不包含它的价值。

要获得其价值,您必须使用GetValue方法,如下所示:

var button = gameObject.AddComponent<ButtonScript>();

var field = button.GetType().GetField("buttonObj");

//Assuming that the type of the field is GameObject
var obj = (GameObject)field.GetValue(button); 

var name = obj.name;