Partager via


Résoudre les erreurs et les avertissements générés à partir d’expressions interdites dans les arborescences d’expressions

Cet article traite des erreurs suivantes du compilateur :

  • CS0765 - Les méthodes partielles avec uniquement une déclaration de définition ou des méthodes conditionnelles supprimées ne peuvent pas être utilisées dans les arborescences d’expressions.
  • CS0831 - Une arborescence d’expression ne doit pas contenir d’accès de base.
  • CS0832 - Une arborescence d’expression ne doit pas contenir d’opérateur d’assignation
  • CS0834 - Une expression lambda avec un corps d’instruction ne peut pas être convertie en arborescence d’expression.
  • CS0835 - Impossible de convertir une expression lambda en arborescence d’expression dont l’argument de type 'type' n’est pas un type délégué.
  • CS0838 - Une arborescence d’expression ne doit pas contenir d’initialiseur de tableau multidimensionnel.
  • CS0845 - Une arborescence d’expression lambda ne doit pas contenir d’opérateur de coalescence avec un littéral nul ou un littéral par défaut dans la partie de gauche.
  • CS0853 - Une arborescence d’expression ne doit pas contenir de spécification d’argument nommé.
  • CS0854 - Une arborescence d’expression ne doit pas contenir d’appel qui utilise des arguments facultatifs.
  • CS0855 - Une arborescence d’expression ne doit pas contenir de propriété indexée.
  • CS1944 - Une arborescence d’expression ne doit pas contenir d’opération de pointeur unsafe.
  • CS1945 - Une arborescence d’expression ne doit pas contenir d’expression de méthode anonyme.
  • CS1946 - Une expression de méthode anonyme ne peut pas être convertie en arborescence d’expression.
  • CS1951 - Une arborescence d’expression lambda ne doit pas contenir de paramètre ref, in ou out.
  • CS1952 - Une arborescence d’expression lambda ne doit pas contenir de méthode avec des arguments variables.
  • CS1963 - Une arborescence d’expression ne doit pas contenir d’opération dynamique.
  • CS1989 - Les expressions lambda asynchrones ne peuvent pas être converties en arborescences d’expressions.
  • CS2037 - Une arborescence d’expression lambda ne doit pas contenir d’appel COM avec ref omis pour les arguments.
  • CS7053 - Une arborescence d’expression ne doit pas contenir « fonctionnalité ».
  • CS8072 - Une arborescence d’expression lambda ne doit pas contenir d’opérateur de propagation de valeur nulle.
  • CS8074 - Une arborescence d’expression lambda ne doit pas contenir d’initialiseur de dictionnaire.
  • CS8075 - Une méthode d’extension Add n’est pas prise en charge pour un initialiseur de collection dans une expression lambda.
  • CS8110 - Une arborescence d’expression ne doit pas contenir de référence à une fonction locale.
  • CS8122 - Une arborescence d’expression ne doit pas contenir l’opérateur de critères spéciaux « is ».
  • CS8143 - Une arborescence d’expression ne doit pas contenir de littéral de tuple.
  • CS8144 - Une arborescence d’expression ne doit pas contenir de conversion de tuple.
  • CS8153 - Une arborescence d’expression lambda ne doit pas contenir d’appel à une méthode, une propriété ou un indexeur qui effectue un retour par référence.
  • CS8155 - Les expressions lambda qui effectuent un retour par référence ne peuvent pas être converties en arborescences d’expressions.
  • CS8188 - Une arborescence d’expression ne doit pas contenir d’expression throw.
  • CS8198 - Une arborescence d’expression ne doit pas contenir de déclaration de variable d’argument de sortie.
  • CS8207 - Une arborescence d’expression ne doit pas contenir de discards.
  • CS8382 - Une arborescence d’expression ne doit pas contenir d’opérateur de comparaison de tuple == ou !=.
  • CS8514 - Une arborescence d’expression ne doit pas contenir d’expression switch.
  • CS8640 - L’arborescence d’expression ne peut pas contenir de valeur de type ref struct ou de type restreint.
  • CS8642 - Une arborescence d’expression ne doit pas contenir d’assignation de coalescence nulle.
  • CS8790 - Une arborescence d’expression ne doit pas contenir d’accès aux indexeurs via System.Index ou System.Range.
  • CS8791 - Une arborescence d’expression ne doit pas contenir d’expression utilisant l’opérateur (« ^ ») pour désigner un index dont les éléments sont comptés à partir de la fin.
  • CS8792 - Une arborescence d’expression ne doit pas contenir d’expression de plage (« .. »).
  • CS8810 - « & » des groupes de méthodes ne peut pas être utilisé dans les arborescences d’expressions.
  • CS8849 - Une arborescence d’expression ne doit pas contenir d’expression with.
  • CS8927 - Une arborescence d’expression ne doit pas contenir d’accès à un membre statique, un membre virtuel ou un membre d’interface abstrait.
  • CS8952 - Une arborescence d’expression ne doit pas contenir de conversion de gestionnaire de chaînes interpolées.
  • CS8972 - Une expression lambda avec des attributs ne peut pas être convertie en arborescence d’expression.
  • CS9170 - Une arborescence d’expression ne doit pas contenir d’accès ou de conversion de tableau inline.
  • CS9175 - Une arborescence d’expression ne doit pas contenir d’expression de collection.
  • CS9226 - Une arborescence d’expressions peut ne pas contenir une forme développée de paramètre de collection params qui n’est pas un tableau.

Restrictions relatives à l’arborescence d’expression

Toutes les erreurs de la liste précédente indiquent que vous avez utilisé un type d’expression C#, qui n’est pas autorisé dans une arborescence d’expression. Dans la plupart des cas, les expressions interdites représentent une syntaxe introduite après C# 3.0. Ces expressions sont interdites, car leur autorisation entraînerait un changement cassant dans toutes les bibliothèques qui analysent les arborescences d’expressions. Toutes les bibliothèques doivent être améliorées pour analyser les nouvelles expressions C#, si des constructions plus récentes sont autorisées.

Les expressions suivantes sont interdites :

Autres restrictions :

  • Les attributs ne peuvent pas être appliqués à l’expression lambda, à ses paramètres ou à son retour.
  • L’expression lambda doit être convertible en un type dérivé de System.Linq.Expressions.Expression dont le paramètre de type est un type délégué.
  • Les paramètres nommés et facultatifs sont restreints. L’expression ne peut pas appeler de méthode spécifiant des arguments nommés, et elle ne peut pas utiliser la valeur par défaut d’un paramètre facultatif.
  • Les initialiseurs de dictionnaire ne sont pas autorisés. Les méthodes d’extension Add ne le sont pas non plus.
  • L’expression cible doit être une expression lambda. Les constantes et les variables ne sont pas autorisées. En revanche, les expressions lambda qui retournent des constantes ou des variables le sont.
  • Les opérations de pointeur unsafe ne sont pas autorisées.
  • Les appels COM doivent inclure ref sur les arguments. Cela ne peut pas être implicite.
  • Le mot clé __arglist, non pris en charge, n’est pas autorisé.