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.
In dit artikel worden de volgende compilerfouten behandeld:
-
CS1100: Methode heeft een parametermodifier '
this' die zich niet op de eerste parameter bevindt -
CS1101: De parametermodifier '
ref' kan niet worden gebruikt met 'this'. -
CS1102: De parametermodifier '
out' kan niet worden gebruikt met 'this'. - CS1103: De eerste parameter van een extensiemethode kan niet van een aanwijzertype zijn.
- CS1105: Extensiemethoden moeten statisch zijn.
- CS1106: Extensiemethoden moeten worden gedefinieerd in een niet-algemene statische klasse.
- CS1109: Extensiemethoden moeten worden gedefinieerd op statische klassen op het hoogste niveau, 'naam' is een geneste klasse.
- CS1110: Kan geen nieuwe extensie definiëren omdat het vereiste type ExtensionAttribute compiler niet kan worden gevonden. Ontbreekt er een verwijzing naar System.Core.dll?
-
CS1112: Gebruik geen 'ExtensionAttribute'. Gebruik in plaats daarvan het trefwoord '
this. - CS1113: Extensiemethode die is gedefinieerd voor een waardetype, kan niet worden gebruikt om gedelegeerden te maken.
- CS1743: Kan geen standaardwaarde opgeven voor de parameter 'this'.
- CS9281: Uitbreidingsdeclaraties hebben mogelijk geen naam.
- CS9282: Uitbreidingsdeclaraties kunnen alleen methoden of eigenschappen bevatten.
- CS9283: Extensies moeten worden gedeclareerd in een statische klasse op het hoogste niveau, niet-algemeen.
- CS9284: De ontvangerparameter van een extensie kan geen standaardwaarde hebben.
- CS9285: Een extensiecontainer kan slechts één ontvangerparameter hebben.
- CS9287: Een ontvangerparameter mag niet dezelfde naam hebben als een parameter voor het extensiecontainertype.
- CS9288: Een parameter, lokale variabele of lokale functie mag niet dezelfde naam hebben als een parameter voor het type extensiecontainer.
- CS9289: parameter lidtype heeft dezelfde naam als een parameter voor het extensiecontainertype.
- CS9290: Een parameter, lokale variabele of lokale functie mag niet dezelfde naam hebben als een extensieparameter.
-
CS9291: '
value': een automatisch gegenereerde parameternaam conflicteert met een extensieparameternaam. - CS9292: Een typeparameter heeft dezelfde naam als een extensieparameter.
- CS9293: Kan in deze context geen extensieparameter gebruiken.
-
CS9294: '
value': een automatisch gegenereerde parameternaam conflicteert met de parameternaam van het extensietype. - CS9295: Het uitgebreide type moet verwijzen naar alle typeparameters die door de extensie zijn gedeclareerd, maar er wordt niet naar een typeparameter verwezen.
-
CS9300: De
refontvangerparameter '' van een extensieblok moet een waardetype of een algemeen type zijn dat is beperkt tot struct. -
CS9301: De ontvangerparameter '
in' of 'ref readonly' van extensie moet een concreet (niet-algemeen) waardetype zijn. - CS9302: nieuw beveiligd lid gedeclareerd in een extensieblok.
- CS9303: Kan geen exemplaarleden declareren in een extensieblok met een naamloze ontvangerparameter.
- CS9304: Kan geen init-only accessors declareren in een extensieblok.
- CS9305: Kan geen modifiers gebruiken voor de naamloze ontvangerparameter van het extensieblok.
- CS9306: Typen en aliassen kunnen geen extensie worden genoemd.
- CS9309: De syntaxis van een extensielid is niet toegestaan in geneste positie binnen de syntaxis van een extensielid.
-
CS9316: Extensieleden zijn niet toegestaan als argument voor '
nameof'. - CS9317: De parameter van een unaire operator moet het uitgebreide type zijn.
- CS9318: Het parametertype voor de ++ of -- operator moet een uitgebreid type zijn.
- CS9319: Een van de parameters van een binaire operator moet het uitgebreide type zijn.
- CS9320: De eerste operand van een overbelaste ploegendienstoperator moet hetzelfde type hebben als het uitgebreide type.
- CS9321: Een extensieblok dat een statische klasse uitbreidt, mag geen door de gebruiker gedefinieerde operators bevatten.
-
CS9322: Kan geen instantieoperator voor een struct declareren, tenzij de ontvangerparameter van een bevat uitbreidingsblok een '
ref' parameter is. - CS9323: Kan de operator exemplaarextensie niet declareren voor een type dat niet bekend is als een struct en is niet bekend als een klasse.
-
CS9326: '
name': extensielidnamen mogen niet hetzelfde zijn als hun uitgebreide type. - CS9329: Dit extensieblok botst met een ander extensieblok. Ze resulteren in conflicterende namen van typen op basis van inhoud in metagegevens.
- CS9339: De uitbreidingsresolutie is dubbelzinnig tussen de volgende leden.
Veelvoorkomende fouten bij uitbreidingsdeclaraties
-
CS1102: De parametermodifier '
out' kan niet worden gebruikt met 'this'. - CS1103: De eerste parameter van een extensiemethode kan niet van een aanwijzertype zijn.
- CS1106: Extensiemethoden moeten worden gedefinieerd in een niet-algemene statische klasse.
- CS1109: Extensiemethoden moeten worden gedefinieerd op statische klassen op het hoogste niveau, 'naam' is een geneste klasse.
- CS1113: Extensiemethode die is gedefinieerd voor een waardetype, kan niet worden gebruikt om gedelegeerden te maken.
- CS1743: Kan geen standaardwaarde opgeven voor de parameter 'this'.
- CS9283: Extensies moeten worden gedeclareerd in een statische klasse op het hoogste niveau, niet-algemeen.
- CS9284: De ontvangerparameter van een extensie kan geen standaardwaarde hebben.
- CS9285: Een extensiecontainer kan slechts één ontvangerparameter hebben.
De compiler verzendt deze fouten wanneer u regels schendt die van toepassing zijn op alle declaraties van extensieleden, ongeacht de gekozen syntaxis. Zie Extensiemethoden voor meer informatie.
Volg deze vereisten om extensieleden correct te declareren:
- Declareer het type dat het bevat als een niet-algemene
staticklasse of struct (CS1106, CS9283). - Declareer het bevattende type op het hoogste niveau, niet genest binnen een ander type (CS1109, CS9283).
- Converteer geen extensiemethoden voor waardetypen naar delegaten (CS1113). Maak in plaats daarvan een reguliere methode.
- Gebruik de
outparameteraanpassing niet voor de ontvangerparameter (CS1102). - Geef geen standaardwaarden op voor de ontvangerparameter (CS1743, CS9284).
- Breid de aanwijzertypen (CS1103) niet uit. De parameter waarop u de
thiswijzigingsfunctie toepast, kan geen aanwijzertype zijn. - Declareer slechts één ontvangerparameter per extensiecontainer (CS9285).
Fouten met betrekking tot extensieblokdeclaraties
- CS9281: Uitbreidingsdeclaraties hebben mogelijk geen naam.
- CS9282: Uitbreidingsdeclaraties kunnen alleen methoden of eigenschappen bevatten.
- CS9287: Een ontvangerparameter mag niet dezelfde naam hebben als een parameter voor het extensiecontainertype.
- CS9288: Een parameter, lokale variabele of lokale functie mag niet dezelfde naam hebben als een parameter voor het type extensiecontainer.
- CS9289: parameter lidtype heeft dezelfde naam als een parameter voor het extensiecontainertype.
- CS9290: Een parameter, lokale variabele of lokale functie mag niet dezelfde naam hebben als een extensieparameter.
-
CS9291: '
value': een automatisch gegenereerde parameternaam conflicteert met een extensieparameternaam. - CS9292: Een typeparameter heeft dezelfde naam als een extensieparameter.
- CS9293: Kan in deze context geen extensieparameter gebruiken.
-
CS9294: '
value': een automatisch gegenereerde parameternaam conflicteert met de parameternaam van het extensietype. - CS9295: Het uitgebreide type moet verwijzen naar alle typeparameters die door de extensie zijn gedeclareerd, maar er wordt niet naar een typeparameter verwezen.
-
CS9300: De
refontvangerparameter '' van een extensieblok moet een waardetype of een algemeen type zijn dat is beperkt tot struct. -
CS9301: De ontvangerparameter '
in' of 'ref readonly' van extensie moet een concreet (niet-algemeen) waardetype zijn. - CS9302: nieuw beveiligd lid gedeclareerd in een extensieblok.
- CS9303: Kan geen exemplaarleden declareren in een extensieblok met een naamloze ontvangerparameter.
- CS9304: Kan geen init-only accessors declareren in een extensieblok.
- CS9305: Kan geen modifiers gebruiken voor de naamloze ontvangerparameter van het extensieblok.
- CS9306: Typen en aliassen kunnen geen extensie worden genoemd.
- CS9309: De syntaxis van een extensielid is niet toegestaan in geneste positie binnen de syntaxis van een extensielid.
-
CS9316: Extensieleden zijn niet toegestaan als argument voor '
nameof'. - CS9317: De parameter van een unaire operator moet het uitgebreide type zijn.
- CS9318: Het parametertype voor ++ of -- operator moet van het uitgebreide type zijn.
- CS9319: Een van de parameters van een binaire operator moet het uitgebreide type zijn.
- CS9320: De eerste operand van een overbelaste ploegendienstoperator moet hetzelfde type hebben als het uitgebreide type.
- CS9321: Een extensieblok dat een statische klasse uitbreidt, mag geen door de gebruiker gedefinieerde operators bevatten.
-
CS9322: Kan de instantieoperator niet declareren voor een struct, tenzij de ontvangerparameter extensieblok een
refparameter '' bevat. - CS9323: Kan de operator exemplaarextensie niet declareren voor een type dat niet bekend is als een struct en is niet bekend als een klasse.
-
CS9326: '
name': extensielidnamen mogen niet hetzelfde zijn als hun uitgebreide type. - CS9329: Dit extensieblok botst met een ander extensieblok. Ze resulteren in conflicterende namen van typen op basis van inhoud in metagegevens.
- CS9339: De uitbreidingsresolutie is dubbelzinnig tussen de volgende leden.
Deze fouten zijn specifiek voor extensieblokken, een C# 14-functie. Extensieblokken worden gedeclareerd met behulp van het extension contextuele trefwoord in een statische klasse. Zie Extensiemethoden voor meer informatie.
Volg deze vereisten om extensieblokken correct te declareren:
- Neem geen naamtoken op in de extensiedeclaratie (CS9281). De extensie declareert alleen de ontvanger.
- Geef geen standaardwaarden op voor de ontvangerparameter (CS9284, behandeld in veelvoorkomende fouten).
- Gebruik het
extensiontrefwoord niet voor typen of aliassen (CS9306). Het is alleen een contextueel trefwoord voor extensieblokken.
Als u extensieleden in extensieblokken correct wilt declareren, volgt u deze vereisten naast de algemene regels:
- Alleen methoden of eigenschappen opnemen als extensieleden (CS9282). Andere lidtypen worden niet ondersteund.
- Geef een parameternaam op voor de ontvanger die leden van de instantieextensie (CS9303) bevat.
- Zorg ervoor dat de naam van de ontvangerparameter uniek is binnen het extensieblok en niet conflicteert met typeparameters (CS9287, CS9288, CS9289, CS9290, CS9291, CS9292, CS9294).
- Verwijzen naar alle typeparameters die zijn gedeclareerd voor de extensie in het uitgebreide type (CS9295). Aanvullende typeparameters kunnen worden toegevoegd aan afzonderlijke leden.
- Nest extensieblokken niet binnen andere extensieblokken (CS9309).
- Gebruik de
refwijzigingsfunctie alleen voor de ontvangerparameter met waardetypen of algemene typen die zijn beperkt tot struct (CS9300). - Gebruik de
inofref readonlymodifier alleen voor de ontvangerparameter met concrete (niet-generieke) waardetypen (CS9301). - Gebruik geen modifiers voor niet-benoemde ontvangerparameters (CS9305).
- Verklaar geen
protectedleden binnen extensieblokken (CS9302). Extensieleden moeten toegankelijk zijn wanneer de extensie binnen het bereik valt. - Declareer geen
init-only-accessors in extensieblokken (CS9304). Gebruik in plaats daarvan gewone eigenschappensetters. - Gebruik extensieleden niet als argumenten voor de
nameofoperator (CS9316). - Kies lidnamen die verschillen van de uitgebreide typenaam (CS9326).
- Zorg ervoor dat extensieblokken unieke namen op basis van inhoud hebben in metagegevens (CS9329). Uitbreidingsblokken samenvoegen of onderscheiden om conflicten te voorkomen.
- Los dubbelzinnige aanroepen van extensieleden op door specifiekere typegegevens op te geven of door gekwalificeerde namen (CS9339) te gebruiken.
Operatorvereisten voor extensieblok
Extensieblokken ondersteunen door de gebruiker gedefinieerde operators met specifieke vereisten:
- Unaire operators moeten het uitgebreide type hebben als hun parameter (CS9317).
- Operators voor incrementeer (
++) en decrementeer (--) moeten als parameter het uitgebreide type hebben (CS9318). - Binaire operators moeten ten minste één parameter hebben die het uitgebreide type (CS9319) is.
- Shift-operators moeten het uitgebreide type hebben als hun eerste operand (CS9320).
- Declareer geen door de gebruiker gedefinieerde operators in extensieblokken die statische klassen uitbreiden (CS9321).
- Wanneer u een struct met exemplaaroperators uitbreidt, gebruikt u de
refwijzigingsfunctie voor de ontvangerparameter (CS9322). - Declareer geen exemplaaroperators voor typen die niet zijn beperkt tot een struct of een klasse (CS9323).
Fouten met betrekking tot this parameterextensiemethoden
-
CS1100: Methode heeft een parametermodifier '
this' die zich niet op de eerste parameter bevindt -
CS1101: De parametermodifier '
ref' kan niet worden gebruikt met 'this'. - CS1105: Extensiemethoden moeten statisch zijn.
- CS1110: Kan geen nieuwe extensie definiëren omdat het vereiste type ExtensionAttribute compiler niet kan worden gevonden. Ontbreekt er een verwijzing naar System.Core.dll?
-
CS1112: Gebruik geen 'ExtensionAttribute'. Gebruik in plaats daarvan het trefwoord '
this.
Deze fouten zijn specifiek voor extensiemethoden waarbij u de ontvanger declareert door de this modifier toe te voegen aan de eerste parameter. Zie Extensiemethoden voor meer informatie.
Als u de parameterextensiemethoden correct wilt declareren this , volgt u deze vereisten naast de algemene regels:
- Voeg de
staticwijzigingsfunctie toe aan de methode (CS1105). - Pas de
thisparameteraanpassing alleen toe op de eerste parameter (CS1100). - Combineer de
refmodifier niet met dethismodifier (CS1101). Als u wilt gebruikenref, converteert u naar een extensieblok. - Voeg een verwijzing toe naar
System.Core.dllin .NET Framework-apps (CS1110). - Gebruik de
thiswijzigingsfunctie voor de eerste parameter in plaats van het ExtensionAttribute kenmerk rechtstreeks toe te passen (CS1112).