Dada uma propriedade em uma classe, com atributos - qual é a maneira mais rápida de determinar se ela contém um determinado atributo? Por exemplo:
[IsNotNullable]
[IsPK]
[IsIdentity]
[SequenceNameAttribute("Id")]
public Int32 Id
{
get
{
return _Id;
}
set
{
_Id = value;
}
}
Qual é o método mais rápido para determinar que, por exemplo, ele tenha o atributo "IsIdentity"?
c#
performance
Otávio Décio
fonte
fonte
Attribute.IsDefined
eliminará uma linha de código e as feias matrizes / conversão.[NotMapped]
na classe, mas para detectá-lo você tem que usarAttribute.IsDefined(pi, typeof(NotMappedAttribute))
IsIdentity[] attr = pi.GetCustomAttributes<IsIdentity>(false);
Se você estiver usando o .NET 3.5, tente com as árvores de Expressão. É mais seguro que a reflexão:
fonte
Você pode usar um método comum (genérico) para ler o atributo em um determinado MemberInfo
fonte
Para atualizar e / ou aprimorar a resposta do @Hans Passant, eu separaria a recuperação da propriedade em um método de extensão. Isso tem o benefício adicional de remover a string mágica desagradável no método GetProperty ()
Seu teste é então reduzido para duas linhas
fonte
Se você está tentando fazer isso em um PCL da Biblioteca de Classes Portátil (como eu), aqui está como você pode fazê-lo :)
Você pode verificar o número de propriedades que possuem essa propriedade especial, se necessário.
fonte
Agora isso pode ser feito sem árvores de expressão e métodos de extensão de uma maneira segura com o novo recurso C #
nameof()
como este:nameof () foi introduzido em C # 6
fonte
Você pode usar o método Attribute.IsDefined
https://msdn.microsoft.com/en-us/library/system.attribute.isdefined(v=vs.110).aspx
Você pode fornecer a propriedade que procura especificamente ou pode percorrer todos eles usando a reflexão, algo como:
fonte
Esta é uma pergunta bastante antiga, mas eu usei
Meu método tem esse parâmetro, mas pode ser construído:
Então, no método, isso:
fonte