Esto es lo que he hecho hasta ahora:
var fields = typeof (Settings.Lookup).GetFields();
Console.WriteLine(fields[0].GetValue(Settings.Lookup));
// Compile error, Class Name is not valid at this point
Y esta es mi clase estática:
public static class Settings
{
public static class Lookup
{
public static string F1 ="abc";
}
}
props
lugar defields
puede confundir a un futuro desarrollador. Las propiedades son sus propias cosas y los campos definitivamente no lo son.Respuestas:
Necesita pasar
null
aGetValue
, ya que este campo no pertenece a ninguna instancia:props[0].GetValue(null)
fuente
Necesita usar la sobrecarga Type.GetField (System.Reflection.BindingFlags):
Por ejemplo:
FieldInfo field = typeof(Settings.Lookup).GetField("Lookup", BindingFlags.Public | BindingFlags.Static); Settings.Lookup lookup = (Settings.Lookup)field.GetValue(null);
fuente
La firma de
FieldInfo.GetValue
espublic abstract Object GetValue( Object obj )
donde
obj
es la instancia de objeto de la que desea recuperar el valor onull
si es una clase estática. Entonces esto debería hacer:var props = typeof (Settings.Lookup).GetFields(); Console.WriteLine(props[0].GetValue(null));
fuente
null
corresponde el segundo ? ¿NoFieldInfo.GetValue
acepta solo un único parámetro? Parece que no puedo encontrar sobrecargasGetValue
ni nadaPrueba esto
FieldInfo fieldInfo = typeof(Settings.Lookup).GetFields(BindingFlags.Static | BindingFlags.Public)[0]; object value = fieldInfo.GetValue(null); // value = "abc"
fuente