Получить экземпляр класса контейнера из 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);
}
Другие вопросы по тегам