2012-09-18 24 views
22

I HAVA una clase como esta:¿Cómo obtener todas las propiedades estáticas y sus valores de una clase que utilizan la reflexión

public class tbl050701_1391_Fields 
{ 
    public static readonly string StateName = "State Name"; 
    public static readonly string StateCode = "State Code"; 
    public static readonly string AreaName = "Area Name"; 
    public static readonly string AreaCode = "Area Code"; 
    public static readonly string Dore = "Period"; 
    public static readonly string Year = "Year"; 
} 

quiero escribir algunos comandos que se devuelve una Dictionary<string, string> que tiene estos valores:

Key       Value 
-------------------------------------------- 
"StateName"     "State Name" 
"StateCode"     "State Code" 
"AreaName"      "Area Name" 
"Dore"       "Period" 
"Year"       "Year" 

tengo este código para obtener el valor de una propiedad:

public static string GetValueUsingReflection(object obj, string propertyName) 
{ 
    var field = obj.GetType().GetField(propertyName, BindingFlags.Public | BindingFlags.Static); 
    var fieldValue = field != null ? (string)field.GetValue(null) : string.Empty; 
    return fieldValue; 
} 

Cómo yo puede conseguir todas las propiedades y sus valores?

+0

Esos son campos estáticos, no propiedades estáticas. ¿Quieres los dos? ¿O solo campos? – CodesInChaos

Respuesta

39

¿cómo puedo obtener todas las propiedades y sus valores?

Bueno, para empezar, es necesario distinguir entre campos y propiedades. Parece que tienes campos aquí. Entonces querría algo como:

public static Dictionary<string, string> GetFieldValues(object obj) 
{ 
    return obj.GetType() 
       .GetFields(BindingFlags.Public | BindingFlags.Static) 
       .Where(f => f.FieldType == typeof(string)) 
       .ToDictionary(f => f.Name, 
          f => (string) f.GetValue(null)); 
} 
+1

gracias, funcionó para mí – Rana

Cuestiones relacionadas