Fouten en waarschuwingen met betrekking tot de params
wijzigingsfunctie voor methodeparameters
Er zijn enkele fouten met betrekking tot de lock
instructie en threadsynchronisatie:
- CS0225: De parameter params moet een eendimensionale matrix zijn of een geldig verzamelingstype hebben
- CS0231: Een parameter voor parameters moet de laatste parameter in een formele parameterlijst zijn.
- CS0466: 'method1' mag geen parameter hebben omdat 'method2' niet
- CS0674: Niet gebruiken
System.ParamArrayAttribute
ofSystem.ParamArrayAttribute
/System.Runtime.CompilerServices.ParamCollectionAttribute
. Gebruik in plaats daarvan hetparams
trefwoord. - CS0758: Beide declaraties van gedeeltelijke methoden moeten een
params
parameter gebruiken of geen van beide mag eenparams
parameter gebruiken - CS1104: Een parametermatrix kan niet worden gebruikt met
this
modifier voor een extensiemethode. - CS1611: De parameter params kan niet worden gedeclareerd als in
ref
ofout
- CS1670:
params
is niet geldig in deze context - CS1751: Kan geen standaardwaarde opgeven voor een parametermatrix.
- CS9218: De typeargumenten voor de methode kunnen niet worden afgeleid van het gebruik omdat een argument met dynamisch type wordt gebruikt en de methode een verzamelingsparameter voor niet-matrixparameters heeft. Geef expliciet de typeargumenten op.
- CS9223: Het maken van paramsverzameling resulteert in een oneindige keten van aanroep van constructor.
- CS9224: Methode kan niet minder zichtbaar zijn dan het lid met de verzameling params.
- CS9225: Constructor verlaat vereist lid niet-geïnitialiseerd.
- CS9227: Type bevat geen definitie voor een geschikte instantiemethode
Add
. - CS9228: Verzamelingstype niet-matrixparams moet een toepasselijke constructor hebben die zonder argumenten kan worden aangeroepen.
Regels voor methodedeclaratie
De volgende fouten geven aan dat u een params
modifier gebruikt voor een parameter wanneer de params
wijzigingsfunctie niet is toegestaan in die context:
- CS0231: Een parameter voor parameters moet de laatste parameter in een formele parameterlijst zijn.
- CS1104: Een parametermatrix kan niet worden gebruikt met
this
modifier voor een extensiemethode. - CS1611: De parameter params kan niet worden gedeclareerd als in
ref
ofout
- CS1670:
params
is niet geldig in deze context - CS1751: Kan geen standaardwaarde opgeven voor een parametermatrix.
De compiler dwingt de volgende regels af voor het gebruik van de params
wijzigingsfunctie voor een methodeparameter:
- De
params
wijzigingsfunctie is alleen toegestaan voor de laatste parameter in een formele parameterlijst. Dit omvat parameters met een standaardwaarde. - U kunt geen standaardargument voor de parameter opnemen wanneer de
params
wijzigingsfunctie wordt gebruikt. - De
params
wijzigingsfunctie kan niet worden toegepast op referentieparameter. Een verwijzingsparameter is een parameter met dein
,ref readonly
ref
ofout
modifier. - De
params
modifier kan niet worden gecombineerd met dethis
modifier voor een extensiemethode. - De
params
wijzigingsfunctie kan niet worden gebruikt voor een overbelaste operator.
In versies vóór C# 12 kan de params
wijzigingsfunctie niet worden gebruikt voor de parameter van een anonieme methode of lambda-expressie.
Parameter- en argumenttyperegels
De volgende fouten geven aan dat het type parameter waarmee wordt gebruikt params
, ongeldig is:
- CS9218: De typeargumenten voor de methode kunnen niet worden afgeleid van het gebruik omdat een argument met dynamisch type wordt gebruikt en de methode een verzamelingsparameter voor niet-matrixparameters heeft. Geef expliciet de typeargumenten op.
- CS0225: De parameter params moet een eendimensionale matrix zijn of een geldig verzamelingstype hebben
- CS9227: Type bevat geen definitie voor een geschikte instantiemethode
Add
. - CS9228: Verzamelingstype niet-matrixparams moet een toepasselijke constructor hebben die zonder argumenten kan worden aangeroepen.
In versies vóór C# 13 is de params
modifier alleen toegestaan voor enkelvoudige matrices. Er waren geen andere typen geldig.
Vanaf C# 13 kan elk geldig verzamelingstype worden gebruikt. Er blijven echter enkele beperkingen bestaan. Het verzamelingstype moet dezelfde regels volgen als het doel van een verzamelingsexpressie.
Andere params-fouten
De volgende fouten geven andere problemen aan met het gebruik van de params
wijzigingsfunctie:
- CS0466: 'method1' mag geen parameter hebben omdat 'method2' niet
- CS0674: Niet gebruiken
System.ParamArrayAttribute
ofSystem.Runtime.CompilerServices.ParamCollectionAttribute
. Gebruik in plaats daarvan hetparams
trefwoord. - CS0758: Beide declaraties van gedeeltelijke methoden moeten een
params
parameter gebruiken of geen van beide mag eenparams
parameter gebruiken - CS9223: Het maken van paramsverzameling resulteert in een oneindige keten van aanroep van constructor.
- CS9224: Methode kan niet minder zichtbaar zijn dan het lid met de verzameling params.
- CS9225: Constructor verlaat vereist lid niet-geïnitialiseerd.
Een methode die een interface implementeert, moet de params
wijzigingsfunctie bevatten als en alleen als het interfacelid de params
wijzigingsfunctie heeft. Op dezelfde manier moeten beide declaraties van een partial
methode de params
modifier bevatten, of geen enkele kan de params
wijzigingsfunctie bevatten.
U moet de params
wijzigingsfunctie gebruiken. U kunt de equivalente kenmerken niet toepassen of System.ParamArrayAttribute System.Runtime.CompilerServices.ParamCollectionAttribute.
De compiler genereert een van de laatste drie fouten in de voorgaande lijst wanneer de code die is gegenereerd om het verzamelingstype te maken, ongeldig is:
- De compiler verzendt CS9223 wanneer de code die wordt verzonden om de verzameling te maken ook een verzameling params van hetzelfde type bevat. Normaal gesproken gebruikt de
Add
methode eenparams
verzameling van hetzelfde type. - De compiler verzendt CS9224 wanneer de
Create
methode voor het verzamelingstype minder toegankelijk is dan de methode die deparams
parameter van het verzamelingstype gebruikt. - De compiler verzendt CS9225 wanneer het verzamelingstype een vereist lid heeft en de parameterloze constructor dat lid niet initialiseert en de System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute on-parameterloze constructor heeft.