2010-10-13 3 views
6

wenn ich ein Attribut erstellt:Abrufen benutzerdefinierter Attributparameterwerte?

public class TableAttribute : Attribute { 
    public string HeaderText { get; set; } 
} 

, die ich ein paar meiner Eigenschaften in einer Klasse

public class Person { 
    [Table(HeaderText="F. Name")] 
    public string FirstName { get; set; } 
} 

gilt aus meiner Sicht habe ich eine Liste von Leuten, die ich in einem bin Anzeige Tabelle .. Wie kann ich den Wert von HeaderText abrufen, um als meine Spaltenüberschriften zu verwenden? So etwas wie ...

<th><%:HeaderText%></th> 

Antwort

23

In diesem Fall würden Sie zuerst abgerufen werden die relevanten PropertyInfo, dann MemberInfo.GetCustomAttributes nennen (in Ihrem Attributtyp vorbei). Übergeben Sie das Ergebnis an ein Array Ihres Attributtyps und rufen Sie dann wie gewohnt die Eigenschaft HeaderText auf. Beispielcode:

0

Jon Skeets Lösung ist gut, wenn Sie zulassen, dass mehrere Attribute des gleichen Typs auf einer Eigenschaft deklariert werden. (AllowMultiple = true)

ex:

[Table(HeaderText="F. Name 1")] 
[Table(HeaderText="F. Name 2")] 
[Table(HeaderText="F. Name 3")] 
public string FirstName { get; set; } 

In Ihrem Fall würde ich annehmen, dass Sie nur ein Attribut pro Objekt erlaubt werden soll. In diesem Fall können Sie auf die Eigenschaften des benutzerdefinierten Attributs zugreifen:

var tableAttribute= propertyInfo.GetCustomAttribute<TableAttribute>(); 
Console.Write(tableAttribute.HeaderText); 
// Outputs "F. Name" when accessing FirstName 
// Outputs "L. Name" when accessing LastName 
Verwandte Themen