Pergunta

Existe alguma maneira de obter os atributos personalizados de um objeto específico que estou recebendo em um método?

Eu não quero nem pode iterar sobre Type.GetMembers () e procurar meu membro. Eu tenho o objeto, que também é membro, que tem o atributo.

Como faço para obter o atributo?

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)

}
Foi útil?

Solução

No. Objetos não têm atributos - membros fazem. No momento em que você está no método "Do", não há nenhum registro do fato de que você chamou Do (MyObject) vs Do (MyOtherFieldWhichHasTheSameValue).

Se você precisa olhar para cima os atributos em um membro, você basicamente tem que passar na MemberInfo relevante, não é o que acontece para avaliar a.

Outras dicas

Você não pode fazer isso sem pelo menos 1 chamada de Reflexão. Depois disso, salvar o valor de alguma forma.

Exemplo:

abstract MyBase
{
  public string Name;
  protected MyBase()
  {
    //look up value of Name attribute and assign to Name
  } 
}

[Name("Foo")]
class MyClass : MyBase
{
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top