Obtenha o valor de um campo estático público por meio de reflexão


85

Isso é o que eu fiz até agora:

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

E esta é minha classe estática:

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

10
Apenas uma observação de que chamar a variável em propsvez de fieldspode confundir um futuro desenvolvedor. As propriedades são suas próprias coisas e os campos definitivamente não são eles.
ErikE

Respostas:




7

A assinatura de FieldInfo.GetValueé

public abstract Object GetValue(
    Object obj
)

onde objé a instância do objeto da qual você deseja recuperar o valor ou nullse é uma classe estática. Então, isso deve fazer:

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

1
Não confie em nomes de variáveis ​​... o OP está chamando GetFields, não GetProperties;)
Thomas Levesque

@ PauliØsterø a que nullcorresponde o segundo ? Não FieldInfo.GetValueaceita apenas um único parâmetro? Não consigo encontrar sobrecargas de GetValuenem nada
Thomas Flinkow

@ThomasFlinkow mero erro de digitação, está corrigido agora
Pauli Østerø

@ PauliØsterø achou que sim :) só queria ter certeza de que o código em questão está pronto para copiar e colar. Então, +1 para uma boa resposta.
Thomas Flinkow

4

Tente isto

FieldInfo fieldInfo = typeof(Settings.Lookup).GetFields(BindingFlags.Static | BindingFlags.Public)[0];
    object value = fieldInfo.GetValue(null); // value = "abc"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.