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


90

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

 var fields = typeof (Settings.Lookup).GetFields();
 Console.WriteLine(fields[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";
   }
}

10
Замечу, что вызов переменной propsвместо fieldsможет запутать будущего разработчика. Свойства - это их собственные вещи, а поля определенно не они.
— ErikE

Ответы:




7

Подпись FieldInfo.GetValueИ.С.

public abstract Object GetValue(
    Object obj
)

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

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

1
Не доверяйте именам переменных ... OP вызывает GetFields, а не GetProperties;)
— Томас Левеск

@ PauliØsterø чему nullсоответствует второй ? Не FieldInfo.GetValueпринимает только один параметр? Кажется, я не могу найти GetValue
— избыток

@ThomasFlinkow - простая опечатка, теперь она исправлена
— Паули Эстеро

@ PauliØsterø так думал :) просто хотел убедиться, что код в вопросе готов для копирования и вставки. Так что +1 за хороший ответ.
— Thomas Flinkow

4

Попробуй это

FieldInfo fieldInfo = typeof(Settings.Lookup).GetFields(BindingFlags.Static | BindingFlags.Public)[0];
    object value = fieldInfo.GetValue(null); // value = "abc"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.