2011-01-05 11 views

risposta

5

attributi sono metadati applicati a membri di un tipo, il tipo stesso, parametri di metodo, o il gruppo. Per voi di avere accesso ai metadati, devi avere avuto la stessa membro originale all'utente GetCustomAttributes ecc, cioè l'istanza di Type, PropertyInfo, FieldInfo ecc

Nel tuo caso, vorrei davvero passare il nome della proprietà allo stesso attributo:

public CustomAttribute : Attribute 
{ 
    public CustomAttribute(string propertyName) 
    { 
    this.PropertyName = propertyName; 
    } 

    public string PropertyName { get; private set; } 
} 

public class MyClass 
{ 
    [Custom("MyProperty")] 
    public int MyProperty { get; set; } 
} 
+5

Grazie So che questo può essere risolto passando proprietà nome, ho intenzione di fare questo senza passare struttura a nome . Quindi in base alla tua risposta non è possibile. – Sadegh

+0

Non possibile, gli attributi non vengono passati informazioni sui membri a cui sono collegati. Ciò che sarebbe utile è se l'istanza "Attribute' è stata passata a" ICustomAttributeProvider' che è stata utilizzata per crearla, ma purtroppo non è questo il caso. –

+0

Grazie Matteo molto utile. – Sadegh

0

non è possibile farlo all'interno della classe di attributo stessa. tuttavia, è possibile che sia un metodo che accetta che un oggetto ottenga un elenco delle proprietà di quell'oggetto (se presenti) che utilizzano l'attributo. utilizzare questa API per implementare che: http://msdn.microsoft.com/en-us/library/ms130869.aspx

+0

OK. So che ci sono molti modi (uno come il tuo approccio), ma nessuno di questi è il mio caso. – Sadegh

95

Utilizzando CallerMemberNameAttribute da .NET 4.5:

public CustomAttribute([CallerMemberName] string propertyName = null) 
{ 
    // ... 
} 
+1

Fantastico. Salva un parametro per un attributo che dovrò utilizzare per decorare le proprietà nell'intero progetto. – Ellesedil

+6

Questa dovrebbe essere la risposta accettata, grazie amico! –

+1

Cercavo questo ma non funziona [con enumerazioni] (http://stackoverflow.com/q/28094024/465942) sfortunatamente .. –

Problemi correlati