Ottieni gli attributi personalizzati di un membro specifico
-
03-07-2019 - |
Domanda
Esiste un modo per ottenere gli attributi personalizzati di un oggetto specifico che sto ricevendo in un metodo?
Non voglio né posso iterare su Type.GetMembers () e cercare il mio membro. Ho l'oggetto, che è anche un membro, che ha l'attributo.
Come ottengo l'attributo?
class Custom
{
[Availability]
private object MyObject = "Hello";
private void Do(object o)
{
//does object 'o' has any custom attributes of type 'Availability'?
}
//somewhere I make the call: Do(MyObject)
}
Soluzione
No. Gli oggetti non hanno attributi - i membri lo fanno. Quando ti trovi in ??" Do " metodo, non c'è traccia del fatto che hai chiamato Do (MyObject) vs Do (MyOtherFieldWhichHasTheSameValue).
Se devi cercare gli attributi su un membro, dovrai sostanzialmente passare il MemberInfo pertinente, non ciò a cui capita di valutare.
Altri suggerimenti
Non puoi farlo senza almeno 1 chiamata Reflection. Successivamente, salva il valore in qualche modo.
Esempio:
abstract MyBase
{
public string Name;
protected MyBase()
{
//look up value of Name attribute and assign to Name
}
}
[Name("Foo")]
class MyClass : MyBase
{
}