Как получить доступ к private полю используя рефлексию?

Помогите разобраться, есть следующий код

public class MyFieldClass
{
    private Dictionary<int, string> test = new Dictionary<int, string>
    {
        [1] = "Один",
        [2] = "Два",
        [3] = "Три"
    };
}

public class MyFieldInfoClass
{
    public static void Main()
    {

        Type myType = typeof(MyFieldClass);
        FieldInfo myFieldInfo1 = myType.GetField("test", BindingFlags.NonPublic | BindingFlags.Instance);

        var test2 = myFieldInfo1.GetValue(null);
    }
}

как можно получить длину private словаря test в классе MyFieldClass?


Ответы (1 шт):

Автор решения: aepot

К полю объекта можно получить доступ только через экземпляр этого объекта.

var obj = new MyFieldClass();
Type myType = typeof(MyFieldClass);
FieldInfo myFieldInfo1 = myType.GetField("test", BindingFlags.NonPublic | BindingFlags.Instance);

var test2 = myFieldInfo1.GetValue(obj);

null покатит только для static поля, конечно если убрать при этом BindingFlags.Instance.

→ Ссылка