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
- oderout
-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.
- CS9226 - Eine Ausdrucksbaumstruktur darf keine erweiterte Form eines params-Auflistungsparameters ohne Array 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:
- Aufrufe von partiellen Methoden, die keine Implementierungsdeklaration besitzen,
- Aufrufe von bedingten Methoden, die entfernt wurden,
- Aufrufe von lokalen Funktionen
async
-Lambdaausdrücke sind unzulässig.- Verwenden von
base
-Zugriff, um eine in einer Basisklasse deklarierte virtuelle Methode direkt aufzurufen, - Zuweisungsvorgänge
- Anweisungslambdas sind nicht zulässig.
- Initialisierer mehrdimensionaler Arrays Stattdessen müssen Sie ein mehrdimensionales Array außerhalb der Ausdrucksbaumstruktur erstellen und initialisieren.
dynamic
-Vorgänge sind nicht zulässig.- Musterabgleichsausdrücke sind nicht zulässig.
- Tupelliterale und viele Tupelvorgänge, z. B. Gleichheitsvergleiche, sind nicht zulässig.
throw
-Ausdrücke sind nicht zulässig.- Ausschussvariablendeklarationen (
_
) - Die Index- und Bereichsoperatoren sind nicht zulässig.
- Zerstörungsfreie Mutationen mit
with
-Ausdrücken sind nicht zulässig. - Sie dürfen Inlinearrays nicht deklarieren oder auf sie zugreifen.
- Sie dürfen keine Sammlungsausdrücke einbauen.
- Die NULL-Weitergabe- und NULL-Sammeloperatoren sind nicht zulässig.
ref struct
-Typen wie System.Span<T> und System.ReadOnlySpan<T> sind nicht zulässig.in
-,out
- undref
-Parameter, einschließlichout
-Variablendeklarationen, sind nicht zulässig.ref
-Rückgaben sind unzulässig.- Aufrufe von-Methoden, deren Rückgabe über
ref
erfolgt, sind unzulässig. - Auf statische abstrakte Schnittstellenmember kann nicht zugegriffen werden.
- Inlinearrays.
- Der Modifizierer
params
ist nur für eindimensionale Arrays zulässig. Andere Sammlungstypen sind nicht zulä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.