Lösa fel och varningar som genereras från uttryck som är förbjudna i uttrycksträd

Den här artikeln beskriver följande kompilatorfel:

  • CS0765 - Partiella metoder med endast en definierande deklaration eller borttagna villkorsmetoder kan inte användas i uttrycksträd.
  • CS0831 - Ett uttrycksträd kanske inte innehåller någon basåtkomst.
  • CS0832 - Ett uttrycksträd får inte innehålla någon tilldelningsoperator
  • CS0834 - Ett lambda-uttryck med en uttryckstext kan inte konverteras till ett uttrycksträd.
  • CS0835 - Det går inte att konvertera lambda till ett uttrycksträd vars typargument "type" inte är en ombudstyp.
  • CS0838 - Ett uttrycksträd får inte innehålla en flerdimensionell matrisinitierare.
  • CS0845 - Ett uttrycksträd lambda får inte innehålla en sammanslagningsoperator med ett null- eller standardvärde på vänster sida.
  • CS0853 - Ett uttrycksträd får inte innehålla en namngiven argumentspecifikation.
  • CS0854 - Ett uttrycksträd får inte innehålla ett anrop som använder valfria argument.
  • CS0855 - Ett uttrycksträd får inte innehålla en indexerad egenskap.
  • CS1944 - Ett uttrycksträd kanske inte innehåller en osäker pekaråtgärd.
  • CS1945 - Ett uttrycksträd får inte innehålla ett anonymt metoduttryck.
  • CS1946 - Ett anonymt metoduttryck kan inte konverteras till ett uttrycksträd.
  • CS1951 - Ett uttrycksträd lambda får inte innehålla en ref, in eller out parameter.
  • CS1952 - Ett uttrycksträd lambda får inte innehålla en metod med variabelargument.
  • CS1963 - Ett uttrycksträd kanske inte innehåller en dynamisk åtgärd.
  • CS1989 - Async lambda-uttryck kan inte konverteras till uttrycksträd.
  • CS2037 - Ett uttrycksträd lambda får inte innehålla ett COM-anrop med ref utelämnat på argument.
  • CS7053 - Ett uttrycksträd får inte innehålla "funktion".
  • CS8072 - Ett uttrycksträd lambda får inte innehålla en null-spridningsoperator.
  • CS8074 - Ett uttrycksträd lambda får inte innehålla en ordlisteinitierare.
  • CS8075 - En tilläggsmetod Add stöds inte för en insamlingsinitierare i ett uttryck lambda.
  • CS8110 - Ett uttrycksträd får inte innehålla en referens till en lokal funktion.
  • CS8122 - Ett uttrycksträd får inte innehålla en mönstermatchningsoperatoris.
  • CS8143 - Ett uttrycksträd får inte innehålla en tupl-literal.
  • CS8144 - Ett uttrycksträd får inte innehålla en omvandling av tuple.
  • CS8153 - Ett uttrycksträd lambda får inte innehålla ett anrop till en metod, egenskap eller indexerare som returneras med referens.
  • CS8155 - Lambda-uttryck som returneras med referens kan inte konverteras till uttrycksträd.
  • CS8188 - Ett uttrycksträd får inte innehålla ett utkastsuttryck.
  • CS8198 - Ett uttrycksträd får inte innehålla en utgående argumentvariabeldeklaration.
  • CS8207 - Ett uttrycksträd får inte innehålla någon platshållare.
  • CS8382 - Ett uttrycksträd får inte innehålla en tuppel == eller != operator.
  • CS8514 - Ett uttrycksträd får inte innehålla ett switch-uttryck.
  • CS8640 - Uttrycksträd kan inte innehålla värde av ref struct eller av begränsad typ.
  • CS8642 - Ett uttrycksträd får inte innehålla en null-sammanslutningstilldelning.
  • CS8790 - Ett uttrycksträd får inte innehålla mönstermatchning System.Index eller System.Range indexerartillgång.
  • CS8791 - Ett uttrycksträd får inte innehålla ett uttryck med "från-slut-index" ('^').
  • CS8792 - Ett uttrycksträd får inte innehålla ett intervalluttryck (''..).
  • CS8810 - '&' på metodgrupper kan inte användas i uttrycksträd.
  • CS8849 - Ett uttrycksträd får inte innehålla ett with-uttryck.
  • CS8927 - Ett uttrycksträd får inte innehålla åtkomst till en statisk virtuell eller abstrakt gränssnittsmedlem.
  • CS8952 - Ett uttrycksträd får inte innehålla en interpolerad stränghanterarkonvertering.
  • CS8972 - Ett lambda-uttryck med attribut kan inte konverteras till ett uttrycksträd.
  • CS9170 - Ett uttrycksträd får inte innehålla en infogad matrisåtkomst eller konvertering.
  • CS9175 - Ett uttrycksträd får inte innehålla ett samlingsuttryck.
  • CS9226 - Ett uttrycksträd får inte innehålla en utökad form av params-samlingsparameter som inte är matrisparameter.
  • CS9296 - Ett uttrycksträd får inte innehålla en tilläggsegenskap eller indexerareåtkomst.
  • CS9307 - Ett uttrycksträd får inte innehålla en namngiven argumentspecifikation utan position.
  • CS9369 - Ett uttrycksträd får inte innehålla en unionskonvertering.

Begränsningar för uttrycksträd

Alla felen i föregående lista tyder på att du använde en C#-uttryckstyp som inte tillåts i ett uttrycksträd. I de flesta fall representerar de förbjudna uttrycken syntax som introducerats efter C# 3.0. De här uttrycken är förbjudna eftersom det skulle skapa en icke-bakåtkompatibel ändring i alla bibliotek som parsar uttrycksträd. Alla bibliotek skulle behöva förbättras för att parsa nya C#-uttryck om nyare konstruktioner tilläts.

Följande uttryck är förbjudna:

Andra begränsningar är:

  • Det går inte att komma åt utökningsegenskaper och indexerare som utökningar.
  • Det går inte att tillämpa attribut på lambda-uttrycket, dess parametrar eller dess returvärde.
  • Lambda-uttrycket måste konverteras till en typ som härleds från System.Linq.Expressions.Expression vars typparameter är en ombudstyp.
  • Begränsade namngivna och valfria parametrar. Uttrycket kan inte anropa en metod som anger namngivna argument och kan inte använda standardvärdet för en valfri parameter.
  • Det går inte att använda ordboksinitierare eller tilläggsmetoder Add .
  • Måluttrycket måste vara ett lambda-uttryck. Konstanter och variabler tillåts inte, men ett lambda-uttryck som returnerar en konstant eller variabel är det.
  • Osäkra pekaråtgärder tillåts inte.
  • COM-anrop måste inkludera ref på argument; det kan inte antas som underförstått.
  • Det nyckelord som inte stöds __arglist.