Introduction au problème :
En programmation, il est souvent nécessaire de déterminer si deux les expressions lambda représentent la même fonctionnalité. Cela peut être difficile en raison de la nature dynamique des expressions lambda et du manque de méthodes de comparaison AST accessibles.
Énoncé du problème :
Étant donné la signature de méthode suivante :
public bool AreTheSame<T>(Expression<Func<T, object>> exp1, Expression<Func<T, object>> exp2)
Quel est le moyen le plus efficace de déterminer si deux expressions lambda sont identiques ? Les expressions en question sont limitées à des expressions membres simples (telles que c => c.ID).
Solution :
Pour comparer efficacement les expressions lambda, on peut utiliser un algorithme personnalisé qui fonctionne sur leurs AST (Abstract Syntax Trees) sous-jacents. Voici une version améliorée du code de Marc qui prend en charge divers scénarios et est disponible sous forme de package NuGet :
public static class LambdaCompare { // ... (code omitted for brevity) ... }
Cette solution mise à jour offre plusieurs avantages par rapport aux approches précédentes :
Exemple d'utilisation :
var result = LambdaCompare.Eq(u1 => u1.ID, u2 => u2.ID); // returns true
Avantages de l'utilisation de LambdaCompare :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!