Une brève introduction aux arbres d'expression en C#
L'arbre d'expression peut être considéré comme l'un des cœurs de Linq. Pourquoi est-il l'un des cœurs de Linq ? Étant donné que l'arborescence d'expression fait que C# ne se contente plus de compiler en IL, nous pouvons générer une arborescence d'expression via C#, utiliser le résultat comme format intermédiaire et le convertir dans le langage natif sur la plate-forme cible. Tel que SQL. C'est ainsi que notre Linq to SQL couramment utilisé génère du SQL.
L'arbre d'expression a été introduit après .NET 3.5. Il s'agit d'un outil puissant et flexible (comme celui utilisé pour construire des requêtes dynamiques dans LINQ).
Jetons d'abord un œil à l'interface API de la classe Expression :
namespace System.Linq.Expressions { // // 摘要: // 以表达式目录树的形式将强类型 lambda 表达式表示为数据结构。此类不能被继承。 // // 类型参数: // TDelegate: // System.Linq.Expressions.Expression`1 表示的委托的类型。 public sealed class Expression<TDelegate> : LambdaExpression { // // 摘要: // 将表达式树描述的 lambda 表达式编译为可执行代码,并生成表示该 lambda 表达式的委托。 // // 返回结果: // 一个 TDelegate 类型的委托,它表示由 System.Linq.Expressions.Expression`1 描述的已编译的 lambda 表达式。 public TDelegate Compile(); // // 摘要: // 生成表示 lambda 表达式的委托。 // // 参数: // debugInfoGenerator: // 编译器用于标记序列点并批注局部变量的调试信息生成器。 // // 返回结果: // 包含 lambda 的已编译版本的委托。 public TDelegate Compile(DebugInfoGenerator debugInfoGenerator); // // 摘要: // 创建一个与此表达式类似的新表达式,但使用所提供的子级。如果所有子级都相同,则将返回此表达式。 // // 参数: // body: // 结果的 System.Linq.Expressions.LambdaExpression.Body 属性。 // // parameters: // 结果的 System.Linq.Expressions.LambdaExpression.Parameters 属性。 // // 返回结果: // 此表达式(如果未更改任何子级),或带有更新的子级的表达式。 public Expression<TDelegate> Update(Expression body, IEnumerable<ParameterExpression> parameters); protected internal override Expression Accept(ExpressionVisitor visitor); } }
La syntaxe de l'arbre d'expression est la suivante :
Expression<Func<type,returnType>> = (param) => lamdaexpresion;
Par exemple :
Expression<Func<int, int, int>> expr = (x, y) => x+y;
Nous exécutons le code ci-dessus et visualisons cet arbre d'expression en mode débogage VS :
Vous pouvez constater que l'arbre d'expression est principalement composé des quatre parties suivantes :
1. Partie du corps
2. .Partie Paramètres
3. Type de nœud NodeType
4. , le corps principal est : x+y, les paramètres sont (x, y), NodeType est une expression Lambda et la valeur de retour est int
La partie principale peut être une expression, mais elle ne peut pas contenir d'instructions. Par exemple : je définis un délégué, et l'expression Lambda peut s'écrire comme ceci :
peut aussi s'écrire comme ceci :
Func<int, int, int> func = (x, y) => x + y;
Cependant, dans le type arbre d'expression, seule la première façon d'écrire peut être utilisée. Si la deuxième façon d'écrire est utilisée, une erreur de compilation sera signalée :
Func<int, int, int> func = (x, y) => { return x + y; };
En plus de la manière d'écrire ci-dessus, l'arbre d'expression peut également s'écrire comme ceci :
ParameterExpression pex1 = Expression.Parameter(typeof(int), "x");//第一个参数 ParameterExpression pex2 = Expression.Parameter(typeof(int), "y");//第二个参数 BinaryExpression bexp = Expression.Add(pex1, pex2);//加法 var lambdaExp = Expression.Lambda<Func<int, int, int>>(bexp, new ParameterExpression[] {pex1,pex2 });
En mode débogage VS, vous pouvez voir que les arbres d'expression générés par les deux méthodes d'écriture sont les mêmes
Compilez l'arbre d'expression dans un délégué
LambdaExpression est un type dérivé de Expression . La classe générique Expression
Nous exécutons le code ci-dessus et le résultat est : 4. Nous avons écrit beaucoup de code, qui calculait essentiellement le résultat de 1+3 à l'aide d'un arbre d'expression.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





Que vous soyez débutant ou professionnel expérimenté, la maîtrise du C# ouvrira la voie à votre carrière.

Le développement des technologies d’intelligence artificielle (IA) bat son plein aujourd’hui et elles ont montré un grand potentiel et une grande influence dans divers domaines. Aujourd'hui, Dayao partagera avec vous 4 cadres de projets liés au modèle d'IA open source .NET LLM, dans l'espoir de vous fournir une référence. https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel est un kit de développement logiciel (SDK) open source conçu pour intégrer de grands modèles de langage (LLM) tels qu'OpenAI, Azure

Si vous êtes un développeur .NET, vous devez être conscient de l'importance d'optimiser les fonctionnalités et les performances pour fournir des logiciels de haute qualité. En utilisant de manière experte les ressources fournies et en réduisant les temps de chargement des sites Web, vous créez non seulement une expérience agréable pour vos utilisateurs, mais vous réduisez également les coûts d'infrastructure.

En termes de traitement des requêtes à haute concurrence, .NETASP.NETCoreWebAPI fonctionne mieux que JavaSpringMVC. Les raisons incluent : la compilation précoce AOT, qui réduit le temps de démarrage, une gestion plus raffinée de la mémoire, où les développeurs sont responsables de l'allocation et de la libération de la mémoire des objets.

Python, en tant que langage de programmation de haut niveau, est facile à apprendre et à utiliser. Une fois que vous aurez besoin d’écrire un programme Python, vous rencontrerez inévitablement des erreurs de syntaxe, et les erreurs de syntaxe d’expression sont courantes. Dans cet article, nous verrons comment résoudre les erreurs de syntaxe d’expression en Python. Les erreurs de syntaxe d'expression sont l'une des erreurs les plus courantes en Python et elles sont généralement causées par une utilisation incorrecte de la syntaxe ou par des composants nécessaires manquants. En Python, les expressions sont généralement constituées de nombres, de chaînes, de variables et d'opérateurs. le plus courant

C # .NET Les questions et réponses d'entrevue comprennent les connaissances de base, les concepts de base et l'utilisation avancée. 1) Connaissances de base: C # est un langage orienté objet développé par Microsoft et est principalement utilisé dans le framework .NET. 2) Concepts de base: la délégation et les événements permettent des méthodes de liaison dynamiques, et LINQ fournit des fonctions de requête puissantes. 3) Utilisation avancée: la programmation asynchrone améliore la réactivité et les arbres d'expression sont utilisés pour la construction de code dynamique.

L'entrevue avec C # Developer Senior Developer nécessite de maîtriser les connaissances de base telles que la programmation asynchrone, la LINQ et les principes de travail internes des frameworks .NET. 1. La programmation asynchrone simplifie les opérations par asynchronisation et attend pour améliorer la réactivité de l'application. 2.Linq exploite des données dans le style SQL et fait attention aux performances. 3. La CLR du cadre net gère la mémoire et la collecte des ordures doit être utilisée avec prudence.

En C ou C++, la virgule "," a différentes utilisations. Ici, nous apprendrons comment les utiliser. Virgules comme opérateurs. L'opérateur virgule est un opérateur binaire qui évalue le premier opérande, ignore le résultat, puis évalue le deuxième opérande et renvoie la valeur. L'opérateur virgule a la priorité la plus basse en C ou C++. Exemple #include<stdio.h>intmain(){ intx=(50,60); inty=(func1(),func2());} Ici, 60 sera attribué à x. Pour l'instruction suivante, func1( sera exécuté en premier
