Erhalten Sie den Wert eines öffentlichen statischen Feldes durch Reflexion


85

Folgendes habe ich bisher getan:

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

Und das ist meine statische Klasse:

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

10
Nur ein Hinweis, dass das Aufrufen der Variablen propsanstelle von fieldseinen zukünftigen Entwickler verwirren kann. Eigenschaften sind ihre eigenen Dinge, und Felder sind es definitiv nicht.
ErikE

Antworten:




7

Die Unterschrift von FieldInfo.GetValueist

public abstract Object GetValue(
    Object obj
)

Wo objist die Objektinstanz, von der Sie den Wert abrufen möchten, oder nullob es sich um eine statische Klasse handelt? Das sollte also reichen:

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

1
Traue keinen Variablennamen ... das OP ruft GetFields auf, nicht GetProperties;)
Thomas Levesque

@ PauliØsterø was entspricht der zweite null? FieldInfo.GetValueAkzeptiert nicht nur einen einzelnen Parameter? Ich kann keine Überladungen von GetValueoder irgendetwas finden
Thomas Flinkow

@ThomasFlinkow nur Tippfehler, es ist jetzt behoben
Pauli Østerø

@ PauliØsterø dachte schon :) wollte nur sicherstellen, dass der Code in der Frage fertig zum Kopieren und Einfügen ist. Also +1 für eine gute Antwort.
Thomas Flinkow

4

Versuche dies

FieldInfo fieldInfo = typeof(Settings.Lookup).GetFields(BindingFlags.Static | BindingFlags.Public)[0];
    object value = fieldInfo.GetValue(null); // value = "abc"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.