サード パーティの 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);
何か案は?