J'ai rencontré un scénario où je dois trier une liste de type personnalisée sur différentes propriétés en fonction de l'entrée. Avec l'aide de quelques articles, j'ai pu proposer une implémentation générique à l'aide de tests unitaires Linq.During, l'un des tests échoués car la conversion implicite se produisait lorsque l'expression Lamda a été créée à l'aide de l'arborescence d'expression.
ci-dessous j'ai mis le exemple de code pour comprendre le problème (pas sûr pourquoi le formatage n'était pas correct, désolé pour cela) p> dans la méthode principale, lorsque j'essaie de transmettre un délégué de fonctionnement de Func directement à Trier la méthode de l'extension, il fonctionne, mais il échoue avec l'arborescence d'expression. P> J'ai trouvé un Similaire problème, mais cela parle de paramètres de type contraint. Est-ce à la fois les mêmes problèmes? Quelqu'un peut-il m'aider à comprendre le problème? p> p>
3 Réponses :
Vous avez le Func
tsource code> objet et renvoie
objet code>.
Vous devez donc compiler votre boxingexpression et renvoyer le résultat:
return Expression.Lambda<Func<T, object>>(boxingExpression, param).Compile();
C'est exact. Mais lorsque je passe un objet
Vous devez utiliser la version en boîte (vous Créer em> BoxingExpression code>, mais basez votre requête finale à la place sur
ProcessionnaireXpression code>):
return Expression.Lambda<Func<T, object>>(boxingExpression, param).Compile();
Ça a du sens. Si je ne me trompe pas, la conversion implicite est faite à l'heure de la compilation et l'exécution est totalement ignorée de cela. Comme les arbres d'expression sont exécutés au moment de l'exécution, doivent avoir un nœud de convertir pour la jeter. S'il vous plaît corrigez-moi si je n'ai pas compris correctement.
@Moorthy - Oui, la boxe est expliquée dans le compilateur (il y a un opcode pour cela). Un Conservation de référence-conservation i> Cast à un type de base est légal, cependant, et est un non-op (rien du tout n'est fait) - Vous pourriez trouver cela fonctionne correctement.
Vous avez des prototypes Bien que