Fouten en waarschuwingen oplossen die zijn gegenereerd opgetreden op expressies die niet zijn toegestaan in expressiestructuren
In dit artikel worden de volgende compilerfouten behandeld:
- Gedeeltelijke methoden cs0765 - met alleen een definiërende declaratie of verwijderde voorwaardelijke methoden kunnen niet worden gebruikt in expressiestructuren.
- CS0831 - Een expressiestructuur bevat mogelijk geen basistoegang.
- CS0832 - Een expressiestructuur bevat mogelijk geen toewijzingsoperator
- CS0834 - Een lambda-expressie met een instructietekst kan niet worden geconverteerd naar een expressiestructuur.
- CS0835 - Kan lambda niet converteren naar een expressiestructuur waarvan het typeargument 'type' geen gemachtigde is.
- CS0838 - Een expressiestructuur bevat mogelijk geen initialisatiefunctie voor multidimensionale matrices.
- CS0845 - Een lambda van een expressiestructuur bevat mogelijk geen samenvouwende operator met een null- of standaard letterlijke linkerzijde.
- CS0853 - Een expressiestructuur bevat mogelijk geen benoemde argumentspecificatie.
- CS0854 - Een expressiestructuur bevat mogelijk geen aanroep of aanroep die gebruikmaakt van optionele argumenten.
- CS0855 - Een expressiestructuur bevat mogelijk geen geïndexeerde eigenschap.
- CS1944 - Een expressiestructuur bevat mogelijk geen onveilige aanwijzerbewerking.
- CS1945 - Een expressiestructuur bevat mogelijk geen anonieme methode-expressie.
- CS1946 - Een anonieme methode-expressie kan niet worden geconverteerd naar een expressiestructuur.
- CS1951 - Een expressiestructuur lambda mag geen ,
in
ofout
parameter bevattenref
. - CS1952 - Een expressiestructuur lambda bevat mogelijk geen methode met variabele argumenten.
- CS1963 - Een expressiestructuur bevat mogelijk geen dynamische bewerking.
- CS1989 - Async lambda-expressies kunnen niet worden geconverteerd naar expressiestructuren.
- CS2037 - Een expressiestructuur lambda bevat mogelijk geen COM-aanroep waarbij verw is weggelaten op argumenten.
- CS7053 - Een expressiestructuur bevat mogelijk geen 'functie'.
- CS8072 - Een expressiestructuur lambda mag geen null-doorgifteoperator bevatten.
- CS8074 - Een lambda voor een expressiestructuur bevat mogelijk geen initialisatiefunctie voor woordenlijst.
- CS8075 - Een extensiemethode
Add
wordt niet ondersteund voor een initialisatiefunctie voor verzamelingen in een expressie lambda. - Cs8110 - Een expressiestructuur bevat mogelijk geen verwijzing naar een lokale functie.
- CS8122 - Een expressiestructuur bevat mogelijk geen operator voor patroonkoppeling
is
. - CS8143 - Een expressiestructuur mag geen letterlijke tuple bevatten.
- Cs8144 - Een expressiestructuur bevat mogelijk geen tupleconversie.
- CS8153 - Een lambda van een expressiestructuur bevat mogelijk geen aanroep naar een methode, eigenschap of indexeerfunctie die met verwijzing wordt geretourneerd.
- CS8155 - Lambda-expressies die met verwijzing worden geretourneerd, kunnen niet worden geconverteerd naar expressiestructuren.
- Cs8188 - Een expressiestructuur bevat mogelijk geen throw-expressie.
- CS8198 - Een expressiestructuur bevat mogelijk geen declaratie van een argumentvariabele.
- Cs8207 - Een expressiestructuur bevat mogelijk geen verwijdering.
- CS8382 - Een expressiestructuur mag geen tuple
==
of!=
operator bevatten. - Cs8514 - Een expressiestructuur bevat mogelijk geen switchexpressie.
- Cs8640-expressiestructuur - kan geen waarde van verw-struct of beperkt type bevatten.
- Cs8642 - Een expressiestructuur bevat mogelijk geen null-samenvouwende toewijzing.
- Cs8790 - Een expressiestructuur bevat mogelijk geen patroonSystem.Index- of System.Range indexeerfunctietoegang.
- CS8791 - Een expressiestructuur bevat mogelijk geen from-end-indexexpressie ('
^
''). - CS8792 - Een expressiestructuur mag geen bereikexpressie ('
..
'') bevatten. - CS8810 -
&
'' voor methodegroepen kan niet worden gebruikt in expressiestructuren. - CS8849 - Een expressiestructuur mag geen -expression bevatten
with
. - CS8927 - Een expressiestructuur bevat mogelijk geen toegang tot een statisch lid van de virtuele of abstracte interface.
- CS8952 - Een expressiestructuur bevat mogelijk geen geïnterpoleerde tekenreekshandlerconversie.
- CS8972 - Een lambda-expressie met kenmerken kan niet worden geconverteerd naar een expressiestructuur.
- CS9170 - Een expressiestructuur bevat mogelijk geen inlinematrixtoegang of -conversie.
- CS9175 - Een expressiestructuur bevat mogelijk geen verzamelingsexpressie.
- Cs9226 - Een expressiestructuur bevat mogelijk geen uitgevouwen vorm van parameterverzameling voor niet-matrixparams.
Beperkingen voor expressiestructuur
Alle fouten in de voorgaande lijst geven aan dat u een C#-expressietype hebt gebruikt dat niet is toegestaan in een expressiestructuur. In de meeste gevallen vertegenwoordigen de verboden expressies de syntaxis die na C# 3.0 is geïntroduceerd. Deze expressies zijn niet toegestaan omdat ze een belangrijke wijziging zouden maken in alle bibliotheken die expressiestructuren parseren. Alle bibliotheken moeten worden uitgebreid om nieuwe C#-expressies te parseren als nieuwere constructs zijn toegestaan.
De volgende expressies zijn verboden:
- Aanroepen van gedeeltelijke methoden die geen uitvoeringsdeclaratie hebben.
- Aanroepen van voorwaardelijke methoden die zijn verwijderd.
- Aanroepen van lokale functies.
async
lambda-expressies zijn niet toegestaan.- Toegang
base
gebruiken om rechtstreeks een virtuele methode aan te roepen die is gedeclareerd in een basisklasse. - toewijzingsbewerkingen .
- instructie lambdas zijn niet toegestaan.
- multidimensionale initialisatieprogramma's voor matrices . In plaats daarvan moet u een multidimensionale matrix buiten de expressiestructuur maken en initialiseren.
dynamic
bewerkingen zijn niet toegestaan.- patroonkoppelingsexpressies zijn niet toegestaan.
- Letterlijke waarden van tuples en veel tuplebewerkingen, zoals gelijkheidsvergelijkingen , zijn niet toegestaan.
throw
expressies zijn niet toegestaan.- declaraties ongedaan maken (
_
). - De index- en bereikoperators zijn niet toegestaan.
- Niet-destructieve mutatie met behulp van
with
expressies is niet toegestaan. - U kunt inlinematrices niet declareren of openen.
- U kunt geen verzamelingsexpressies opnemen.
- De operators voor null-doorgifte en null-samensning zijn niet toegestaan.
ref struct
typen, zoals System.Span<T> en System.ReadOnlySpan<T> zijn niet toegestaan.in
,out
enref
parameters, inclusiefout
variabeledeclaraties, zijn niet toegestaan.ref
retourneert niet toegestaan.- Aanroepen naar methoden die worden geretourneerd door
ref
zijn niet toegestaan. - Leden van statische abstracte interface kunnen niet worden geopend.
- Inlinematrices.
- De
params
wijzigingsfunctie is alleen toegestaan voor eendimensionale matrices. Andere verzamelingstypen zijn niet toegestaan.
Andere beperkingen zijn:
- Kenmerken kunnen niet worden toegepast op de lambda-expressie, de bijbehorende parameters of return.
- De lambda-expressie moet worden geconverteerd naar een type dat is afgeleid van System.Linq.Expressions.Expression wiens typeparameter een gemachtigdentype is.
- benoemde en optionele parameters zijn beperkt. De expressie kan geen methode aanroepen die benoemde argumenten opgeeft en kan de standaardwaarde van een optionele parameter niet gebruiken.
- Initialisatiefuncties voor woordenlijst zijn niet toegestaan. Geen van beide uitbreidingsmethoden
Add
. - De doelexpressie moet een lambda-expressie zijn. Constanten en variabelen zijn niet toegestaan, maar een lambda-expressie die een constante of variabele retourneert, is.
- Onveilige aanwijzerbewerkingen zijn niet toegestaan.
- COM-aanroepen moeten argumenten bevatten
ref
; deze kunnen niet worden geïmpliceerd. - Het niet-ondersteunde
__arglist
trefwoord is niet toegestaan.