Delen via


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 of System.ParamArrayAttribute/System.Runtime.CompilerServices.ParamCollectionAttribute. Gebruik in plaats daarvan het params trefwoord.
  • CS0758: Beide declaraties van gedeeltelijke methoden moeten een params parameter gebruiken of geen van beide mag een params 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 of out
  • 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 of out
  • 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 de in, ref readonlyref of out modifier.
  • De params modifier kan niet worden gecombineerd met de this 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 of System.Runtime.CompilerServices.ParamCollectionAttribute. Gebruik in plaats daarvan het params trefwoord.
  • CS0758: Beide declaraties van gedeeltelijke methoden moeten een params parameter gebruiken of geen van beide mag een params 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 een params verzameling van hetzelfde type.
  • De compiler verzendt CS9224 wanneer de Create methode voor het verzamelingstype minder toegankelijk is dan de methode die de params 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.

Zie ook