Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De C#-compiler genereert fouten en waarschuwingen wanneer u letterlijke tekenreeksen declareert met een onjuiste syntaxis of deze gebruikt in niet-ondersteunde contexten. Deze diagnostische gegevens helpen u bij het identificeren van problemen met basistekenreeksen, letterlijke tekens, ruwe tekenreeksen en UTF-8-tekenreeksen.
- CS1009: Niet-herkende escape-sequentie.
- CS1010: Nieuwe regel in constante.
- CS1011: Letterlijk teken leeg.
- CS1012: Te veel tekens in letterlijke tekens.
- CS1039: Niet-onbepaalde tekenreeks letterlijk.
- CS8996: Onbewerkte tekenreeksen zijn niet toegestaan in preprocessor-instructies.
- CS8997: Niet-beëindigde ruwe tekenreeks.
- CS8998: Onvoldoende aanhalingstekens voor deze onbewerkte tekenreeksinhoud.
- CS8999: Lijn begint niet met dezelfde witruimte als de afsluitende regel van de letterlijke tekenreeks.
- CS9000: Het scheidingsteken voor een onbewerkte tekenreeks moet op een aparte regel staan.
- CS9001: Letterlijke tekenreeksen met meerdere regels zijn alleen toegestaan in letterlijke geïnterpoleerde tekenreeksen.
- CS9002: letterlijke tekenreeksen met meerdere regels moeten ten minste één regel inhoud bevatten.
- CS9003: Lijn bevat andere witruimte dan verwacht.
- CS9004: Onvoldoende aanhalingstekens voor ruwe tekenreeksliteralen.
:CS9005 Niet genoeg sluitende accolades voor geïnterpoleerde ruwe tekenreeks. - CS9006: Te veel openende accolades voor geïnterpoleerde ongeformatteerde string.
- nl-NL: CS9007: Te veel sluitende accolades voor ruwe geïnterpoleerde tekenreeks.
- CS9008: Reeks van @-tekens is niet toegestaan.
- CS9009: Tekenreeks moet beginnen met aanhalingsteken.
- CS9026: De invoertekenreeks kan niet worden geconverteerd naar de equivalente UTF-8 byteweergave.
- CS9047: Operator kan niet worden toegepast op operanden die geen UTF-8 byteweergaven zijn.
- CS9274: Kan deze letterlijke tekenreeks niet verzenden naar de gegevenssectie omdat er xxHash128-conflicten zijn met een andere letterlijke tekenreeks.
- CS9315: Gecombineerde lengte van gebruikerstekenreeksen die door het programma worden gebruikt, overschrijdt de toegestane limiet. Als u een letterlijke tekenreeks toevoegt, moet de toepassing opnieuw worden opgestart.
Onjuist gevormde letterlijke tekenreeksen
- CS1009 - Niet-herkende escapereeks.
- CS1010 - Nieuwe regel in constante.
- CS1011 - Letterlijk teken leeg.
- CS1012 - Te veel tekens in letterlijke tekens.
- CS1039 - Niet-onbepaalde tekenreeks letterlijk.
Als u deze fouten wilt corrigeren, past u de volgende technieken toe:
- Gebruik een van de standaard escapereeksen die zijn gedefinieerd in de C#-taalspecificatie, zoals
\n(newline), (tab),\t\\(backslash) of\"(dubbele aanhalingstekens) (CS1009). De compiler herkent geen escapereeksen die geen deel uitmaken van de taalspecificatie, dus als u niet-gedefinieerde escapereeksen gebruikt, wordt deze fout veroorzaakt omdat de compiler niet kan bepalen welk teken u wilt vertegenwoordigen. - Voeg het aanhalingsteken sluiten toe om de letterlijke tekenreeks (CS1039) te voltooien. Letterlijke tekenreeksen moeten zowel een scheidingsteken voor openen als sluiten hebben, dus een niet-onbepaalde tekenreeks zorgt ervoor dat de compiler de volgende broncode behandelt als onderdeel van de tekenreeksinhoud, wat leidt tot parseringsfouten.
- Voeg precies één teken toe tussen de enkele aanhalingstekens in de letterlijke tekens (CS1011, CS1012). Letterlijke tekens vertegenwoordigen één tekenwaarde en moeten exact één teken of een geldige escapereeks bevatten, dus letterlijke tekens van lege tekens of tekens die meerdere tekens bevatten, schenden de taalregels voor het
chartype. - Letterlijke tekenreeksen splitsen die meerdere bronlijnen omvatten door elke regel te beëindigen met een afsluitend aanhalingsteken en de volgende regel te starten met een openend aanhalingsteken, met behulp van de operator
+om ze samen te voegen (CS1010). Gewone letterlijke tekenreeksen kunnen geen werkelijke nieuwe regeltekens bevatten, omdat het afsluitende aanhalingsteken op dezelfde regel moet staan als het openingsaanhalingsteken, maar u kunt meerdere regels in een tekenreeks verwerken via samenvoeging of door gebruik te maken van verbatime tekenreeksen of onbewerkte tekenreeksen, die ingesloten nieuwe regels als onderdeel van de tekenreeksinhoud toestaan.
Zie tekenreeksen voor meer informatie.
Onjuist gevormde ruwe letterlijke tekenreeksen
- CS8996 - Ruwe letterlijke tekenreeksen zijn niet toegestaan in preprocessor-instructies.
- CS8997 - Niet-onbepaalde onbewerkte tekenreeks letterlijk.
- CS8998 - Er zijn onvoldoende aanhalingstekens voor deze onbewerkte tekenreeksinhoud.
- CS8999 - Lijn begint niet met dezelfde witruimte als de afsluitende regel van de ruwe tekstreeks.
- CS9000 - Letterlijk scheidingsteken voor onbewerkte tekenreeksen moet op een eigen regel staan.
- CS9001 - Letterlijke tekenreeksen met meerdere regels zijn alleen toegestaan in letterlijke geïnterpoleerde tekenreeksen.
- CS9002 - Letterlijke tekenreeksen met meerdere regels moeten ten minste één regel inhoud bevatten.
- CS9003 - Regel bevat andere witruimte dan verwacht.
- CS9004 - Onvoldoende aanhalingstekens voor letterlijke tekenreeks.
- CS9005 - Onvoldoende afsluitende accolades voor geïnterpoleerde raw-string letterlijke tekenreeks.
- CS9006 - Te veel geopende accolades voor een geïnterpoleerde rauwe string literal.
- CS9007 - Te veel sluitende accolades voor geïnterpoleerde raw string literal.
- CS9008 - De reeks @-tekens is niet toegestaan.
- CS9009 - Tekenreeks moet beginnen met aanhalingsteken.
Als u deze fouten wilt corrigeren, past u de volgende technieken toe:
- Gebruik gewone tekenreeksen of verbatim tekenreeksen in plaats van raw tekenreeksen in preprocessorrichtlijnen, zoals
#if,#define, of#pragma(CS8996). Preprocessor-instructies worden geëvalueerd tijdens de voorverwerkingsfase voordat lexicale analyse plaatsvindt, zodat de compiler de letterlijke syntaxis van onbewerkte tekenreeksen in deze contexten niet kan herkennen, omdat onbewerkte tekenreeksen tijdens de latere lexicale analysefase worden geïdentificeerd. - Voeg een afsluitende scheidingsteken toe dat overeenkomt met het openende scheidingsteken om de ruwe letterlijke tekenreeks (CS8997, CS9004) te voltooien. De letterlijke syntaxis van de onbewerkte tekenreeks vereist dat de scheidingstekens voor openen en sluiten hetzelfde aantal opeenvolgende dubbele aanhalingstekens (ten minste drie) bevatten, zodat een ontbrekend of niet-overeenkomend sluitend scheidingsteken voorkomt dat de compiler bepaalt waar de tekenreeksinhoud eindigt.
- Plaats de begin- en eindafscheidingen van multiline letterlijke tekenreeksen op afzonderlijke regels, zonder verdere inhoud op die regels (CS9000). De regels voor onbewerkte tekenreeksindelingen met meerdere regels vereisen dat scheidingstekens op aparte regels staan om duidelijke grenzen voor de tekenreeksinhoud vast te stellen en om het trimming van witruimtes mogelijk te maken, waardoor alle gemeenschappelijke inspringingen van alle inhoudsregels worden verwijderd.
- Voeg ten minste één regel inhoud toe tussen de scheidingstekens voor openen en sluiten van de letterlijke tekenreeks met meerdere regels (CS9002). Voor de taalspecificatie moeten onbewerkte tekenreeksen met meerdere regels werkelijke inhoud bevatten, omdat lege onbewerkte tekenreeksen met meerdere regels geen doel hebben en waarschijnlijk onvolledige code aangeven, terwijl onbewerkte tekenreeksen met één regel (met scheidingstekens op dezelfde regel) leeg kunnen zijn en de juiste syntaxis zijn voor lege tekenreekswaarden.
- Pas de inspringing van de ruwere tekenreekslijnen aan om overeen te komen met of te overstijgen de inspringing van de afsluitende scheidingstekenlijn (CS8999, CS9003). De regels voor het verwerken van witruimten van onbewerkte letterlijke tekenreeksen gebruiken de voorloopspaties van het afsluitende scheidingsteken als basislijn voor het bijsnijden van de algemene inspringing van alle inhoudslijnen. Inhoudslijnen met minder inspringing dan het afsluitende scheidingsteken schenden dit bijsnijdingsalgoritme en duiden op onjuiste opmaak.
- Verhoog het aantal dubbel aanhalingsteken in uw onbewerkte tekenreeks-afscheider om elke opeenvolgende reeks aanhalingstekens in de inhoud (CS8998) te overschrijden. Het scheidingsteken moet meer opeenvolgende aanhalingstekens bevatten dan een willekeurige reeks binnen de tekenreeksinhoud, zodat de compiler ondubbelzinnig onderscheid kan maken tussen aanhalingstekens die deel uitmaken van de inhoud en de scheidingstekenreeks die het einde van de tekenreeks markeert.
- Zorg ervoor dat bij geïnterpoleerde letterlijke tekenreeksen het aantal dollartekens (
$) aan het begin van de reeks overeenkomt met het aantal opeenvolgende accolades dat je nodig hebt als letterlijke inhoud (CS9005, CS9006, CS9007). De geïnterpoleerde syntaxis van onbewerkte tekenreeksen maakt gebruik van het aantal dollartekens om de lengte van de escape-reeks accolades te bepalen, dus$$"""vereist{{voor interpolatiegaten en staat enkele{tekens toe als inhoud, terwijl niet-overeenkomende accolades duiden op onjuiste interpolatiesyntaxis of inhoud die een ander aantal dollartekens nodig heeft. - Verwijder het
@voorvoegsel uit uw ruwe letterlijke tekenreeks en gebruik alleen het aanhalingsteken als scheidingsteken (CS9008, CS9009). Onbewerkte letterlijke tekenreeksen zijn een unieke syntaxis die geïntroduceerd is in C# 11 en die geen gebruik maakt van het letterlijke tekenreeksvoorvoegsel, en de taalspecificatie staat niet toe om de letterlijke syntaxis te combineren met onbewerkte tekenreeksen, omdat onbewerkte tekenreeksen al ondersteuning bieden voor meerdere regels aan inhoud en geen escapereeksen nodig hebben.
Opmerking
CS9001 wordt niet meer geproduceerd in de huidige versies van C#. Letterlijke tekenreeksen met meerdere regels ondersteunen nu interpolatie zonder dat hiervoor een exacte notatie is vereist.
Voor meer informatie, zie ruwe letterlijke tekenreeksen.
Letterlijke tekenreeksen van UTF-8
- CS9026 - De invoertekenreeks kan niet worden geconverteerd naar de equivalente UTF-8-byteweergave.
- CS9047 - De operator kan niet worden toegepast op operanden die geen UTF-8-byteweergaven zijn.
Als u deze fouten wilt corrigeren, past u de volgende technieken toe:
- Verwijder tekens of escapereeksen die niet kunnen worden gecodeerd in UTF-8 uit de
u8letterlijke tekenreeks (CS9026). De UTF-8-coderingsspecificatie ondersteunt de volledige Unicode-tekenset, maar vereist geldige Unicode-scalaire waarden. Surrogaatcodepunten (waarden in het bereik U+D800 tot en met U+DFFF) kunnen dus niet rechtstreeks worden weergegeven in UTF-8-tekenreeksen omdat ze zijn gereserveerd voor UTF-16-surrogaatpaarcodering in plaats van zelfstandige tekens weer te geven en ze te coderen als UTF-8 een ongeldige bytevolgorde zou opleveren. - Zorg ervoor dat beide operanden van de optellingsoperator UTF-8 letterlijke tekenreeksen zijn (gemarkeerd met het
u8achtervoegsel) bij het samenvoegen van UTF-8-tekenreeksen (CS9047). De compiler biedt speciale ondersteuning voor het samenvoegen van letterlijke UTF-8-tekenreeksen tijdens het compileren , die waarden produceertReadOnlySpan<byte>die de samengevoegde UTF-8-bytereeksen vertegenwoordigen, maar UTF-8-tekenreeksen combineren met regulierestringwaarden of andere typen, wordt niet ondersteund omdat het typesysteem niet kan bepalen of een bytespanne of een tekenreeks moet worden geproduceerd, en de onderliggende representaties (UTF-8 bytes versus UTF-16 tekens) fundamenteel niet compatibel zijn.
Voor meer informatie, zie UTF-8 tekenreeksen.
Letterlijke tekenreeksen in gegevenssecties
- CS9274: Kan deze letterlijke tekenreeks niet verzenden naar de gegevenssectie omdat er xxHash128-conflicten zijn met een andere letterlijke tekenreeks.
- CS9315: Gecombineerde lengte van gebruikerstekenreeksen die door het programma worden gebruikt, overschrijdt de toegestane limiet. Als u een letterlijke tekenreeks toevoegt, moet de toepassing opnieuw worden opgestart.
Probeer de volgende technieken om deze problemen op te lossen:
- Schakel de functie voor letterlijke tekenreeksen voor de experimentele gegevenssectie uit in uw toepassing wanneer u een hash-botsing (CS9274) tegenkomt. Deze fout geeft aan dat twee verschillende letterlijke tekenreeksen dezelfde XXHash128-waarde hebben geproduceerd, waardoor de optimalisatie niet correct werkt, dus moet u de functievlag verwijderen waarmee dit experimentele gedrag mogelijk is.
- Start de toepassing opnieuw op na het wijzigen van letterlijke tekenreeksen tijdens een foutopsporingssessie wanneer de functie gegevenssectie is ingeschakeld (CS9315). De infrastructuur voor dynamisch opnieuw laden kan letterlijke tekenreeksen die zijn opgeslagen in de gegevenssectie niet bijwerken, omdat ze zijn ingesloten in een speciale indeling die tijdens runtime niet kan worden gewijzigd, zodat de uitvoering met de oude tekenreekswaarden onjuist gedrag zou opleveren.