Étant donné une propriété dans une classe, avec des attributs - quel est le moyen le plus rapide de déterminer si elle contient un attribut donné? Par exemple:
[IsNotNullable]
[IsPK]
[IsIdentity]
[SequenceNameAttribute("Id")]
public Int32 Id
{
get
{
return _Id;
}
set
{
_Id = value;
}
}
Quelle est la méthode la plus rapide pour déterminer qu'elle possède par exemple l'attribut "IsIdentity"?
c#
performance
Otávio Décio
la source
la source
Attribute.IsDefined
éliminera une ligne de code et les tableaux / transtypages laids.[NotMapped]
dans la classe mais pour le détecter, vous devez utiliserAttribute.IsDefined(pi, typeof(NotMappedAttribute))
IsIdentity[] attr = pi.GetCustomAttributes<IsIdentity>(false);
Si vous utilisez .NET 3.5, vous pouvez essayer les arborescences d'expressions. C'est plus sûr que la réflexion:
la source
Vous pouvez utiliser une méthode commune (générique) pour lire un attribut sur un MemberInfo donné
la source
Pour mettre à jour et / ou améliorer la réponse de @Hans Passant, je séparerais la récupération de la propriété en une méthode d'extension. Cela a l'avantage supplémentaire de supprimer la chaîne magique désagréable dans la méthode GetProperty ()
Votre test est alors réduit à deux lignes
la source
Si vous essayez de le faire dans une bibliothèque de classes portable PCL (comme moi), voici comment vous pouvez le faire :)
Vous pouvez ensuite vérifier le nombre de propriétés qui ont cette propriété spéciale si nécessaire.
la source
Cela peut maintenant être fait sans arbres d'expression et méthodes d'extension de manière sûre avec la nouvelle fonctionnalité C #
nameof()
comme celle-ci:nameof () a été introduit en C # 6
la source
Vous pouvez utiliser la méthode Attribute.IsDefined
https://msdn.microsoft.com/en-us/library/system.attribute.isdefined(v=vs.110).aspx
Vous pouvez fournir la propriété que vous recherchez spécifiquement ou vous pouvez les parcourir toutes en utilisant la réflexion, quelque chose comme:
la source
C'est une question assez ancienne mais j'ai utilisé
Ma méthode a ce paramètre mais il pourrait être construit:
Puis dans la méthode ceci:
la source