Подтвердить что ты не робот

Получить значение открытого статического поля через отражение

Это то, что я сделал до сих пор:

 var props = typeof (Settings.Lookup).GetFields();
 Console.WriteLine(props[0].GetValue(Settings.Lookup)); 
         // Compile error, Class Name is not valid at this point

И это мой статический класс:

public static class Settings
{
   public static class Lookup
   {
      public static string F1 ="abc";
   }
}
4b9b3361

Ответ 1

Вам нужно передать null в GetValue, так как это поле не принадлежит ни одному экземпляру:

props[0].GetValue(null)

Ответ 2

Вам нужно использовать перегрузку Type.GetField(System.Reflection.BindingFlags):

Например:

FieldInfo field = typeof(Settings.Lookup).GetField("Lookup", BindingFlags.Public | BindingFlags.Static);

Settings.Lookup lookup = (Settings.Lookup)field.GetValue(null);

Ответ 3

Подпись FieldInfo.GetValue

public abstract Object GetValue(
    Object obj
)

где obj - это экземпляр объекта, из которого вы хотите получить значение или значение null если это статический класс. Так что это должно сделать:

var props = typeof (Settings.Lookup).GetFields();
Console.WriteLine(props[0].GetValue(null)); 

Ответ 4

Попробуйте это

FieldInfo fieldInfo = typeof(Settings.Lookup).GetFields(BindingFlags.Static | BindingFlags.Public)[0];
    object value = fieldInfo.GetValue(null); // value = "abc"