Maison > développement back-end > C++ > Comment puis-je convertir une fonction C# en expression ?

Comment puis-je convertir une fonction C# en expression ?

Barbara Streisand
Libérer: 2025-01-03 09:25:39
original
941 Les gens l'ont consulté

How Can I Convert a C# Func to an Expression?

Conversion de C# Func to Expression>

En C#, les expressions lambda offrent un moyen pratique de représenter des fonctions légères. Bien qu'il soit simple de convertir un lambda en un Expression> à l'aide d'un appel de méthode, il peut y avoir des scénarios dans lesquels la conversion d'un Func directement vers une expression est souhaitée.

Le défi

Cependant, une telle conversion directe n'est pas possible en raison d'une erreur de compilation, comme illustré dans le code suivant :

public void ContainTheDanger(Func<T> dangerousCall)
{
    try
    {
        dangerousCall();
    }
    catch (Exception e)
    {
        // This next line does not work...
        Expression<Func<T>> DangerousExpression = dangerousCall;
        var nameOfDanger = ((MemberExpression)dangerousCall.Body).Member.Name;
        throw new DangerContainer("Danger manifested while " + nameOfDanger, e);
    }
}
Copier après la connexion

L'erreur vient du fait que Func représente un délégué générique plutôt qu'une expression.

Limitations

Malheureusement, il n'existe aucun moyen simple d'obtenir la conversion souhaitée. Tentative d'obtenir l'expression originale à partir d'un Func pourrait s'avérer irréalisable en raison des optimisations et de la perte de données lors de la compilation.

Approches alternatives

Comme alternative, on peut envisager :

  • Utiliser réflexion pour inspecter le Func et déduire son expression prévue.
  • Utiliser un compilateur d'expression personnalisé ou un modèle d'objet dynamique pour créer un arbre d'expression basé sur Func.

Cependant, ces approches impliquent généralement des et des techniques sujettes aux erreurs.

Conclusion

Conversion une fonction à une expression> directement est intrinsèquement difficile en C#. Des approches alternatives peuvent être explorées au prix d'une complexité accrue et de limitations potentielles.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal