"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso recuperar dinamicamente os valores de atributo de uma classe em tempo de execução?

Como posso recuperar dinamicamente os valores de atributo de uma classe em tempo de execução?

Postado em 2025-02-07
Navegar:168

How Can I Dynamically Retrieve Attribute Values from a Class at Runtime?

atributos de pesquisa de tempo de execução

Este artigo apresenta um método geral para acessar e extrair dinamicamente os valores da propriedade de uma classe.

use o método especial

define um método comum que aceita parâmetros de tipo:

public string GetDomainName()
]

dentro do método:

  • use typeof (t) .getCustomattributes para recuperar atributos personalizados:

      var dnAttribute = typeof(T).GetCustomAttributes(
        typeof(DomainNameAttribute), true
      ).FirstOrDefault() as DomainNameAttribute;
  • Se a propriedade existir, seu valor será retornado:

      if (dnAttribute != null)
      {
        return dnAttribute.Name;
      }
  • Caso contrário, retorne nulo:

      return null;
    ]

Método de extensão da utilitário

Para aplicabilidade mais ampla, generalize este método para lidar com qualquer atributo:

public static class AttributeExtensions
{
    public static TValue GetAttributeValue(
        this Type type, 
        Func valueSelector) 
        where TAttribute : Attribute
}

dentro do método de extensão:

  • Recupere as propriedades personalizadas:

      var att = type.GetCustomAttributes(
        typeof(TAttribute), true
      ).FirstOrDefault() as TAttribute;
  • Se o atributo existir, use o fornecido valoresElector para extrair o valor necessário:

    ]
      if (att != null)
      {
        return valueSelector(att);
      }
  • Caso contrário, retorne o valor padrão deste tipo:

      return default(TValue);
    ]

exemplo de uso

  • recuperar domainname atributo de myclass :
string name = typeof(MyClass).GetDomainName();
  • Recupere qualquer valor de atributo de myclass usando o método de extensão:
string name = typeof(MyClass)
    .GetAttributeValue((DomainNameAttribute dna) => dna.Name);
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3