Fehler und Warnungen beheben, die aus in Ausdrucksbaumstrukturen unzulässigen Ausdrücken generiert wurden

In diesem Artikel werden die folgenden Compilerfehler behandelt:

  • CS0765 - In Ausdrucksbaumstrukturen dürfen weder partielle Methoden mit nur einer definierenden Deklaration noch entfernte bedingte Methoden verwendet werden.
  • CS0831 - Eine Ausdrucksbaumstruktur darf keinen Basiszugriff enthalten.
  • CS0832 - Eine Ausdrucksbaumstruktur darf keinen Zuweisungsoperator enthalten.
  • CS0834 - Ein Lambdaausdruck mit einem Anweisungstext kann nicht in eine Ausdrucksbaumstruktur konvertiert werden.
  • CS0835 - Lambda kann nur dann in eine Ausdrucksstruktur konvertiert werden, wenn das Typargument „type“ kein Delegattyp ist.
  • CS0838 - Eine Ausdrucksbaumstruktur darf keinen Initialisierer mehrdimensionaler Arrays enthalten.
  • CS0845 - Ein Ausdrucksbaumstruktur-Lambda darf keinen Sammeloperator mit einem NULL- oder Standardliteral auf der linken Seite enthalten.
  • CS0853 - Eine Ausdrucksbaumstruktur darf keine benannte Argumentspezifikation enthalten.
  • CS0854 - Eine Ausdrucksbaumstruktur darf keinen Aufruf enthalten, in dem optionale Argumente verwendet werden.
  • CS0855 - Ausdrucksbaumstrukturen dürfen keine indizierten Eigenschaften enthalten.
  • CS1944 - Eine Ausdrucksbaumstruktur darf keinen unsicheren Zeigervorgang enthalten.
  • CS1945 - Eine Ausdrucksbaumstruktur darf keinen Ausdruck für anonyme Methoden enthalten.
  • CS1946 - Ein Ausdruck für anonyme Methoden kann nicht in eine Ausdrucksbaumstruktur konvertiert werden.
  • CS1951 - Das Ausdrucksbaumstruktur-Lambda darf keinen ref-, in- oder out-Parameter enthalten.
  • CS1952 - Das Lambda einer Ausdrucksstruktur darf keine Methode mit Variablenargumenten enthalten.
  • CS1963 - Eine Ausdrucksbaumstruktur darf keinen dynamischen Vorgang enthalten.
  • CS1989 - Asynchrone Lambdaausdrücke können nicht in Ausdrucksstrukturen konvertiert werden.
  • CS2037 - Ein Lambda einer Ausdrucksstruktur darf keinen COM-Aufruf enthalten, in dem „ref“ für Argumente ausgelassen wurde.
  • CS7053 - Eine Ausdrucksbaumstruktur darf nicht „Feature“ enthalten.
  • CS8072 - Ein Lambda einer Ausdrucksstruktur darf keinen Operator enthalten, der null weitergibt.
  • CS8074 - Ein Lambda einer Ausdrucksstruktur darf keinen Wörterbuchinitialisierer enthalten.
  • CS8075 - Add-Erweiterungsmethoden werden für Sammlungsinitialisierer in einem Ausdruckslambda nicht unterstützt.
  • CS8110 - Eine Ausdrucksbaumstruktur enthält möglicherweise keinen Verweis auf eine lokale Funktion.
  • CS8122 - Eine Ausdrucksbaumstruktur darf keinen „is“-Mustervergleichsoperator enthalten.
  • CS8143 - Eine Ausdrucksbaumstruktur darf kein Tupelliteral enthalten.
  • CS8144 - Eine Ausdrucksbaumstruktur darf keine Tupelkonvertierung enthalten.
  • CS8153 - Ein Lambda einer Ausdrucksstruktur darf keinen Aufruf einer Methode, einer Eigenschaft oder eines Indexers enthalten, deren bzw. dessen Rückgabe durch Verweis erfolgt.
  • CS8155 - Lambdaausdrücke, deren Rückgabe als Verweis erfolgt, können nicht in Ausdrucksstrukturen konvertiert werden.
  • CS8188 - Eine Ausdrucksbaumstruktur darf keinen throw-Ausdruck enthalten.
  • CS8198 - Eine Ausdrucksbaumstruktur darf keine Variablendeklaration mit einem out-Argument enthalten.
  • CS8207 - Eine Ausdrucksbaumstruktur darf keine Ausschussvariable enthalten.
  • CS8382 - Eine Ausdrucksbaumstruktur darf keinen !=- oder -Tupeloperator enthalten.==
  • CS8514 - Eine Ausdrucksbaumstruktur darf keinen switch-Ausdruck enthalten.
  • CS8640 - Eine Ausdrucksbaumstruktur darf keinen Wert vom „ref struct“- oder eingeschränkten Typ enthalten.
  • CS8642 - Eine Ausdrucksbaumstruktur darf keine NULL-Sammelzuweisung enthalten.
  • CS8790 - Eine Ausdrucksbaumstruktur darf keinen Indexerzugriff mit dem Muster System.Index oder System.Range enthalten.
  • CS8791 - Eine Ausdrucksbaumstruktur darf keinen vom Ende ausgehenden Indexausdruck („^“) enthalten.
  • CS8792 - Eine Ausdrucksbaumstruktur darf keinen Bereichsausdruck („..“) enthalten.
  • CS8810 - &“ für Methodengruppen darf in Ausdrucksbaumstrukturen nicht verwendet werden.
  • CS8849 - Eine Ausdrucksbaumstruktur darf keinen with-Ausdruck enthalten.
  • CS8927 - Eine Ausdrucksbaumstruktur darf keinen Zugriff auf ein statisches virtuelles oder abstraktes Schnittstellenmember enthalten.
  • CS8952 - Eine Ausdrucksbaumstruktur darf keine Handlerkonvertierung einer interpolierten Zeichenfolge enthalten.
  • CS8972 - Ein Lambdaausdruck mit Attributen kann nicht in eine Ausdrucksstruktur konvertiert werden.
  • CS9170 - Eine Ausdrucksbaumstruktur darf keinen Inlinearrayzugriff und keine Inlinearraykonvertierung enthalten.
  • CS9175 - Eine Ausdrucksbaumstruktur darf keinen Sammlungsausdruck enthalten.

Einschränkungen der Ausdrucksbaumstruktur

Alle Fehler in der vorhergehenden Liste deuten darauf hin, dass Sie einen Ausdruckstyp aus C# verwendet haben, der in einer Ausdrucksbaumstruktur nicht zulässig ist. In den meisten Fällen stellen die unerlaubten Ausdrücke die Syntax dar, die nach C# 3.0 eingeführt wurde. Diese Ausdrücke sind unzulässig, da sie einen Breaking Change in allen Bibliotheken erstellen würden, die Ausdrucksbaumstrukturen parsen. Alle Bibliotheken müssten erweitert werden, um neue C#-Ausdrücke zu parsen, wenn neuere Konstrukte erlaubt wären.

Die folgenden Ausdrücke sind unzulässig:

Weitere Einschränkungen:

  • Attribute können nicht auf den Lambdaausdruck, seine Parameter oder die Rückgabe angewendet werden.
  • Der Lambdaausdruck muss in einen von System.Linq.Expressions.Expression abgeleiteten Typ konvertierbar sein, dessen Typparameter ein Delegattyp ist.
  • Benannte und optionale Parameter sind eingeschränkt. Der Ausdruck darf keine Methode aufrufen, die benannte Argumente angibt, und er darf nicht den Standardwert eines optionalen Parameters verwenden.
  • Wörterbuchinitialisierer sind unzulässig. Dies gilt auch für Add-Erweiterungsmethoden.
  • Der Zielausdruck muss ein Lambdaausdruck sein. Konstanten und Variablen sind unzulässig, aber ein Lambdaausdruck, der eine Konstante oder Variable zurückgibt, ist zulässig.
  • Unsichere Zeigervorgänge sind nicht zulässig.
  • COM-Aufrufe müssen ref für Argumente enthalten. Dies kann nicht impliziert sein.
  • Das nicht unterstützte Schlüsselwort __arglist ist nicht zulässig.