2

我在这里使用 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
}

这可能吗 ?

4

2 回答 2

3

这可能吗 ?

不,反射是关于发现一种类型的元数据。AFieldInfo不包含有关该类型的特定实例的任何信息。这就是为什么您FieldInfo甚至可以在根本不创建该类型的实例的情况下获得 a :

typeof(MyClass).GetField(...)

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

于 2016-02-16T20:14:58.687 回答
2

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

如果你有一个实例,MyClass你可以这样做:

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

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

    return fieldInfoOfB.GetValue(obj);
}
于 2016-02-16T20:11:58.907 回答