我正在使用第三方 API,我需要访问内部字段(“_fieldOfA”)的私有字段(“_fieldOfB”)。下面的示例说明了该组合。我正在寻找的字段是内部类型的列表(ClassC
并且ClassD
是内部的并且在同一个程序集中)。
public abstract class ClassA
{
internal ClassB _fieldOfA;
}
public class ClassB
{
private readonly List<ClassC<ClassD, int>> _fieldOfB;
}
我已经尝试过反射,但我似乎无法正确转换最终类型 - 动态类型保持不变Object
(请注意我的类 extends ClassA
)
var assemblyHandle = typeof (ClassB).Assembly;
var genericTypeC = assemblyHandle.GetType("ApiNamespace.ClassC`2");
var typeD = assemblyHandle.GetType("ApiNamespace.ClassD");
var genericTypesForC = new Type[] { typeD, typeof(int) };
var typeC = genericTypeC.MakeGenericType(genericTypesForC);
var typeOfList = typeof(List<>).MakeGenericType(typeC);
var fieldOfAInfo= typeof(ClassA).GetField("_fieldOfA", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance);
var fieldOfAValue = fieldOfAInfo.GetValue(this);
var fieldOfBInfo= typeof(ClassB).GetField("_fieldOfB", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance);
var uncastedFieldOfBValue = fieldOfBInfo.GetValue(fieldOfAValue);
dynamic fieldOfBValue = Convert.ChangeType(uncastedFieldOfBValue, typeOfList);
有任何想法吗?