Pourquoi les arbres d'expression sont-ils plus sûrs que la réflexion?

.net expression-trees reflection

Question

Dans sa réponse à la question du moyen le plus rapide de déterminer si une propriété contient un attribut donné, l'utilisateur Darin Dimitrov a affirmé que les arbres d'expression sont plus sûrs que la réflexion. Est-ce vrai, et si oui, pourquoi est-ce vrai?

Réponse acceptée

Parce que lorsque vous recherchez votre champ (comme dans cette question), vous utilisez la représentation de chaîne "Id" . Une fois que ce sera changé, votre réflexion s'effondrera.

Darin suggère un typage statique:

Expression<Func<Program, int>> expression = p => p.Id;

Tu vois ça? C'est une fonctionnalité intéressante mais peu connue du compilateur C # 4.0: construire automatiquement un arbre d'expression à partir d'expression lambda et le convertir en Expression<T> . Ainsi, plus tard, vous pourrez le parcourir et obtenir MemberInfo of Id . Mais ce n’est pas aussi universel que Reflection car vous ne pouvez pas effectuer de recherche par string .


Réponse populaire

La question est la suivante: pourquoi les arbres d’expression sont-ils plus sûrs que la réflexion?

La réponse est qu'ils utilisent tous les deux la réflexion.

Modifier pour clarifier - MemberInfo.GetCustomAttributes est un appel de réflexion.

http://msdn.microsoft.com/en-us/library/system.reflection.memberinfo.getcustomattributes(VS.71).aspx




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi