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";
}
}
props
vez defields
pode confundir um futuro desenvolvedor. As propriedades são suas próprias coisas e os campos definitivamente não são eles.Respostas:
Você precisa passar
null
paraGetValue
, uma vez que este campo não pertence a nenhuma instância:props[0].GetValue(null)
fonte
Você precisa usar a sobrecarga de Type.GetField (System.Reflection.BindingFlags):
Por exemplo:
FieldInfo field = typeof(Settings.Lookup).GetField("Lookup", BindingFlags.Public | BindingFlags.Static); Settings.Lookup lookup = (Settings.Lookup)field.GetValue(null);
fonte
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 ounull
se é uma classe estática. Então, isso deve fazer:var props = typeof (Settings.Lookup).GetFields(); Console.WriteLine(props[0].GetValue(null));
fonte
null
corresponde o segundo ? NãoFieldInfo.GetValue
aceita apenas um único parâmetro? Não consigo encontrar sobrecargas deGetValue
nem nadaTente isto
FieldInfo fieldInfo = typeof(Settings.Lookup).GetFields(BindingFlags.Static | BindingFlags.Public)[0]; object value = fieldInfo.GetValue(null); // value = "abc"
fonte