2011-01-19 10 views
5

Ho scritto l'attributo di proprietà personalizzato e l'ho impostato su un paio di proprietà nella mia classe. Ora vorrei durante il runtime ottenere solo le proprietà che hanno questo attributo, essere in grado di ottenere il valore della proprietà così come i valori dei campi degli attributi. Potresti aiutarmi per favore con questo compito? grazie per aiutoOttieni tutte le proprietà con valori di riflessione

+0

Sono abbastanza sicuro che questo è un duplicato, ma non ho trovato un incontro. Ho trovato il relativo [Controlla se la proprietà ha attributo] (http://stackoverflow.com/questions/2051065/check-if-property-has-attribute) e [Trovare gli attributi sulle proprietà di un'istanza di una classe] (http://stackoverflow.com/questions/2999035/finding-the-attributes-on-the-properties-of-an-instance-of-a-class). –

risposta

13

Ecco un esempio:

void Main() 
{ 
    var myC = new C { Abc = "Hello!" }; 
    var t = typeof(C); 
    foreach (var prop in t.GetProperties()) 
    { 
     var attr = prop.GetCustomAttributes(typeof(StringLengthAttribute), true).Cast<StringLengthAttribute>().FirstOrDefault(); 
     if (attr != null) 
     { 
      var attrValue = attr.MaximumLength; // 100 
      var propertyValue = prop.GetValue(myC, null); // "Hello!" 
     } 
    } 
} 
class C 
{ 
    [StringLength(100)] 
    public string Abc {get;set;} 
} 
Problemi correlati