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)

}
È stato utile?

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
{
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top