Fel och varningar relaterade till modifieraren för params metodparametrar

Det finns några fel som rör instruktionen lock och trådsynkroniseringen:

  • CS0225: Parameterparametern måste vara en endimensionell matris eller ha en giltig samlingstyp
  • CS0231: En params-parameter måste vara den sista parametern i en formell parameterlista.
  • CS0466: "method1" bör inte ha en params-parameter eftersom "method2" inte
  • CS0674: Använd System.ParamArrayAttribute inte eller . System.ParamArrayAttribute/System.Runtime.CompilerServices.ParamCollectionAttribute Använd nyckelordet params i stället.
  • CS0758: Båda partiella metoddeklarationer måste använda en params parameter, eller så kan ingen av dem använda en params parameter
  • CS1104: En parametermatris kan inte användas med this modifierare på en tilläggsmetod.
  • CS1611: Parametern params kan inte deklareras som i ref eller out
  • CS1670: params är inte giltigt i den här kontexten
  • CS1751: Det går inte att ange ett standardvärde för en parametermatris.
  • CS9218: Typargumenten för metoden kan inte härledas från användningen eftersom ett argument med dynamisk typ används och metoden har en params-samlingsparameter som inte är matrismatris. Prova att uttryckligen ange typargumenten.
  • CS9223: Skapandet av params-samlingen resulterar i en oändlig kedja av anrop av konstruktorn.
  • CS9224: Metoden kan inte vara mindre synlig än medlemmen med params-samlingen.
  • CS9225: Konstruktorn lämnar nödvändig medlem onitialiserad.
  • CS9227: Typen innehåller ingen definition för en lämplig instansmetod Add .
  • CS9228: Samlingstypen icke-matrisparamer måste ha en tillämplig konstruktor som kan anropas utan argument.

Regler för metoddeklaration

Följande fel indikerar att en params modifierare används för en parameter när modifieraren inte tillåts i den kontexten params :

  • CS0231: En params-parameter måste vara den sista parametern i en formell parameterlista.
  • CS1104: En parametermatris kan inte användas med this modifierare på en tilläggsmetod.
  • CS1611: Parametern params kan inte deklareras som i ref eller out
  • CS1670: params är inte giltigt i den här kontexten
  • CS1751: Det går inte att ange ett standardvärde för en parametermatris.

Kompilatorn tillämpar följande regler för din användning av params modifieraren på en metodparameter:

  • Modifieraren params tillåts endast för den sista parametern i en formell parameterlista. Detta inkluderar alla parametrar med ett standardvärde.
  • Du kan inte inkludera ett standardargument för parametern när params modifieraren används.
  • Det params går inte att använda modifieraren för referensparametern. En referensparameter är en med inmodifieraren , ref readonlyeller ref out .
  • Modifieraren params kan inte kombineras med this modifieraren på en tilläggsmetod.
  • Modifieraren params kan inte användas på en överbelastad operator.

I versioner före C# 12 params kan modifieraren inte användas på parametern för en anonym metod eller lambda-uttryck.

Regler för parameter- och argumenttyp

Följande fel anger att den typ av parameter som används med params är ogiltig:

  • CS9218: Typargumenten för metoden kan inte härledas från användningen eftersom ett argument med dynamisk typ används och metoden har en params-samlingsparameter som inte är matrismatris. Prova att uttryckligen ange typargumenten.
  • CS0225: Parameterparametern måste vara en endimensionell matris eller ha en giltig samlingstyp
  • CS9227: Typen innehåller ingen definition för en lämplig instansmetod Add .
  • CS9228: Samlingstypen icke-matrisparamer måste ha en tillämplig konstruktor som kan anropas utan argument.

I versioner före C# 13 params tillåts modifieraren endast på endimensionella matriser. Inga andra typer var giltiga.

Från och med C# 13 kan alla giltiga samlingstyper användas. Vissa begränsningar kvarstår dock. Samlingstypen måste följa samma regler som målet för ett samlingsuttryck.

Andra params-fel

Följande fel indikerar andra problem med att använda params modifieraren:

  • CS0466: "method1" bör inte ha en params-parameter eftersom "method2" inte
  • CS0674: Använd System.ParamArrayAttribute inte eller System.Runtime.CompilerServices.ParamCollectionAttribute. Använd nyckelordet params i stället.
  • CS0758: Båda partiella metoddeklarationer måste använda en params parameter, eller så kan ingen av dem använda en params parameter
  • CS9223: Skapandet av params-samlingen resulterar i en oändlig kedja av anrop av konstruktorn.
  • CS9224: Metoden kan inte vara mindre synlig än medlemmen med params-samlingen.
  • CS9225: Konstruktorn lämnar nödvändig medlem onitialiserad.

En metod som implementerar ett gränssnitt måste innehålla params modifieraren om och endast om gränssnittsmedlemmen har params modifieraren. På samma sätt måste båda deklarationerna för en partial metod innehålla params modifieraren, eller så kan ingen inkludera params modifieraren.

Du måste använda params modifieraren. Du kan inte använda motsvarande attribut, antingen System.ParamArrayAttribute eller System.Runtime.CompilerServices.ParamCollectionAttribute.

Kompilatorn genererar ett av de tre sista felen i föregående lista när koden som genereras för att skapa samlingstypen är ogiltig:

  • Kompilatorn genererar CS9223 när koden som genereras för att skapa samlingen också innehåller en params-samling av samma typ. Vanligtvis Add tar metoden en params samling av samma typ.
  • Kompilatorn genererar CS9224 när Create metoden för samlingstypen är mindre tillgänglig än den metod som tar parametern params för samlingstypen.
  • Kompilatorn genererar CS9225 när samlingstypen har en obligatorisk medlem och den parameterlösa konstruktorn inte initierar den medlemmen och har System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute på den parameterlösa konstruktorn.

Se även