Ottieni il valore di un campo statico pubblico tramite la riflessione


90

Questo è quello che ho fatto finora:

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

E questa è la mia classe statica:

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

10
Solo una nota che chiamare la variabile propsinvece di fieldsrischia di confondere un futuro sviluppatore. Le proprietà sono cose di se stesse e i campi non lo sono assolutamente.
ErikE

Risposte:




7

La firma di FieldInfo.GetValueè

public abstract Object GetValue(
    Object obj
)

dove si objtrova l'istanza dell'oggetto da cui si desidera recuperare il valore o nullse è una classe statica. Quindi questo dovrebbe fare:

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

1
Non fidarti dei nomi delle variabili ... l'OP sta chiamando GetFields, non GetProperties;)
Thomas Levesque

@ PauliØsterø a cosa nullcorrisponde il secondo ? Non FieldInfo.GetValueaccetta solo un singolo parametro? Non riesco a trovare sovraccarichi GetValueo altro
Thomas Flinkow

@ThomasFlinkow semplice errore di battitura, è stato risolto ora
Pauli Østerø

@ PauliØsterø lo pensava così :) volevo solo assicurarmi che il codice nella domanda fosse pronto per il copia-incolla. Quindi +1 per una buona risposta.
Thomas Flinkow,

4

Prova questo

FieldInfo fieldInfo = typeof(Settings.Lookup).GetFields(BindingFlags.Static | BindingFlags.Public)[0];
    object value = fieldInfo.GetValue(null); // value = "abc"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.