Estou tentando criar um método genérico que lerá um atributo em uma classe e retornará esse valor em tempo de execução. Como eu faria isso?
Nota: o atributo DomainName é da classe DomainNameAttribute.
[DomainName("MyTable")]
Public class MyClass : DomainBase
{}
O que estou tentando gerar:
//This should return "MyTable"
String DomainNameValue = GetDomainName<MyClass>();
c#
generics
custom-attributes
Zaffiro
fonte
fonte
Respostas:
ATUALIZAR:
Este método pode ser generalizado para funcionar com qualquer atributo:
e usar assim:
fonte
const Filed
na classe estática?Já existe uma extensão para fazer isso.
Assim:
fonte
fonte
Usei a resposta de Darin Dimitrov para criar uma extensão genérica para obter atributos de membro para qualquer membro de uma classe (em vez de atributos para uma classe). Estou postando aqui porque outras pessoas podem achar útil:
Exemplo de uso:
fonte
Uma versão simplificada da primeira solução de Darin Dimitrov:
fonte
Este é um bom tutorial se você não o viu antes http://msdn.microsoft.com/en-us/library/aa288454(VS.71).aspx
Em particular, é de seu interesse a seção aqui, chamada Acessando o Atributo http://msdn.microsoft.com/en-us/library/aa288454(VS.71).aspx#vcwlkattributestutorialanchor3
fonte
Provavelmente tão fácil de usar o corpo da função genérica embutida. Não faz sentido para mim tornar a função genérica em relação ao tipo MyClass.
fonte
Caso alguém precise de um resultado anulável e para que isso funcione em Enums, PropertyInfo e classes, aqui está como resolvi. Esta é uma modificação da solução atualizada de Darin Dimitrov.
Exemplos de uso:
fonte
Em vez de escrever muito código, faça o seguinte:
fonte
fonte