Получить экземпляр класса контейнера из FieldInfo
Я работаю с отражением C# здесь: у меня есть FieldInfo свойства, и я хотел бы получить экземпляр класса, к которому он принадлежит (чтобы я мог получить содержимое другого свойства):
для примера возьмите этот класс:
class MyClass
{
public int A { get; set; }
public int B { get; set; }
}
в какой-то части кода у меня есть
void Function(FieldInfo fieldInfoOfA)
{
// here I need to find the value of B
}
Это возможно?
2 ответа
Это возможно?
Нет. Размышление об обнаружении метаданных типа. FieldInfo
не содержит никакой информации о конкретном экземпляре этого типа. Вот почему вы можете получить FieldInfo
даже не создавая экземпляр типа:
typeof(MyClass).GetField(...)
Учитывая приведенный выше фрагмент, вы можете видеть, что FieldInfo
могут быть получены без какой-либо зависимости от конкретного случая.
FieldInfo
обеспечивает доступ к метаданным для поля в классе, он не зависит от указанного экземпляра.
Если у вас есть экземпляр MyClass
вы можете сделать это:
object Function(MyClass obj, FieldInfo fieldInfoOfA)
{
var declaringType = fieldInfoOfA.DeclaringType;
var fieldInfoOfB = declaringType.GetField("B");
return fieldInfoOfB.GetValue(obj);
}