从 FieldInfo 获取容器 class 实例

Get a container class instance from a FieldInfo

我在这里使用 C# 反射: 我有一个 属性 的 FieldInfo,我想获取它所属的 class 的实例(这样我就可以访问另一个 属性 的内容):

例如 class:

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
}

这可能吗?

FieldInfo 提供对 class 中字段元数据的访问,它独立于指定的实例。

如果您有 MyClass 的实例,您可以这样做:

object Function(MyClass obj, FieldInfo fieldInfoOfA)
{
    var declaringType = fieldInfoOfA.DeclaringType;

    var fieldInfoOfB = declaringType.GetField("B");

    return fieldInfoOfB.GetValue(obj);
}

Is this possible ?

没有。反射是关于发现类型的元数据。 FieldInfo 不包含有关该类型的特定实例的任何信息。这就是为什么您甚至根本不需要创建该类型的实例就可以获得 FieldInfo 的原因:

typeof(MyClass).GetField(...)

根据上面的代码片段,您可以看到 FieldInfo 可以在不依赖于特定实例的情况下获得。