Uzyskaj wartość publicznego pola statycznego poprzez odbicie


85

Oto, co zrobiłem do tej pory:

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

A to moja statyczna klasa:

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

10
Tylko uwaga, że ​​wywołanie zmiennej propszamiast wywołania fieldsmoże zmylić przyszłego programistę. Właściwości są ich własnymi sprawami, a pola zdecydowanie nimi nie są.
ErikE

Odpowiedzi:




7

Podpis FieldInfo.GetValuejest

public abstract Object GetValue(
    Object obj
)

gdzie objjest instancja obiektu, z której chcesz pobrać wartość lub nullczy jest to klasa statyczna. Więc to powinno wystarczyć:

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

1
Nie ufaj nazwom zmiennych ... OP wywołuje GetFields, a nie GetProperties;)
Thomas Levesque

@ PauliØsterø, czemu nullodpowiada druga ? Nie FieldInfo.GetValueakceptuje tylko jednego parametru? Nie mogę znaleźć przeciążenia GetValueani niczego
Thomas Flinkow

@ThomasFlinkow zwykła literówka, naprawiona teraz
Pauli Østerø

@ PauliØsterø tak myślał :) Chciałem się tylko upewnić, że kod w pytaniu jest gotowy do kopiowania i wklejania. Więc +1 za dobrą odpowiedź.
Thomas Flinkow

4

Spróbuj tego

FieldInfo fieldInfo = typeof(Settings.Lookup).GetFields(BindingFlags.Static | BindingFlags.Public)[0];
    object value = fieldInfo.GetValue(null); // value = "abc"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.