GetValue() из поля переменной внутри класса
Предположим, у меня есть простой класс:
public class TestScript : MonoBehaviour {
public Vector3 myVector3;
}
Теперь я хочу перебрать поля экземпляра этого класса и получить доступ к полям этого поля (Field-Ception!) И присвоить значения переменным нужного типа, эффективно "оборачивая" поле, чтобы оно могло быть сериализованная. Здесь я бы достиг поля Vector3 "myVector3" и, дойдя до него, прошел через его поля и назначил их значения трем плавающим элементам (из чего состоит Vector3).
Проблема? FieldInfo.GetValue()
возвращает тип MonoField
! Если я использую fieldinfo.FieldType
, это возвращает Vector3
, но это не помогает мне, так как мне нужно значение:/
TestScript myTestScript;//an instance of the MonoBehaviour class
const BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance;
//the fields... only 1 in this case (myVector3)
FieldInfo[] fields = myTestScript.GetType().GetFields(flags);
//store Type...
var tp = myTestScript.GetType();
//iterate over the fields
foreach FieldInfo field in fields) {
if (field != null) {
//check if the field is of Type Vector3
if(field.FieldType == typeof(Vector3)) {
const BindingFlags flags_v3 = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance;
//the following will give me an array of FieldInfo
//with Type MonoField, but I need the
//actual x, y and z (floats) fields!
FieldInfo[] fields_v3 = field.GetType().GetFields(flags);
//added with edit:
foreach(FieldInfo field_v3 in fields_v3) {
object value = field_v3 .GetValue(field)//the line in question... Since field.GetType returns MonoFields instead of the Vector3, I can not access the Vector3 Type's x y z fields/values.
}
}
}
}
1 ответ
field.GetType()
возвращает тип фактического объекта отражения, который MonoField
, в этом случае. использование field.FieldType
, это свойство содержит тип значения, хранящегося в самом поле:
FieldInfo[] fields_v3 = field.FieldType.GetFields(flags);