Отримати значення відкритого статичного поля за допомогою відображення


85

Це те, що я зробив до цього часу:

 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
Не довіряйте іменам змінних ... ОП викликає GetFields, а не GetProperties;)
Томас Левеск,

@ PauliØsterø, чому відповідає другий null? Не FieldInfo.GetValueприймає лише один параметр? Здається, я не можу знайти перевантажень GetValueчи чогось іншого
Thomas Flinkow

@ThomasFlinkow просто друкарська помилка, це виправлено зараз
Pauli Østerø

@ PauliØsterø так думав :) просто хотів переконатися, що код у питанні готовий до копіювання та вставлення. Тож +1 за хорошу відповідь.
Томас Флінков,

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.