Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Fel och varningar relaterade till modifieraren för
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.ParamArrayAttributeinte eller .System.ParamArrayAttribute/System.Runtime.CompilerServices.ParamCollectionAttributeAnvänd nyckelordetparamsi stället. - CS0758: Båda partiella metoddeklarationer måste använda en
paramsparameter, eller så kan ingen av dem använda enparamsparameter - CS1104: En parametermatris kan inte användas med
thismodifierare på en tilläggsmetod. - CS1611: Parametern params kan inte deklareras som i
refellerout - 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
thismodifierare på en tilläggsmetod. - CS1611: Parametern params kan inte deklareras som i
refellerout - 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
paramstillå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
paramsmodifieraren används. - Det
paramsgår inte att använda modifieraren för referensparametern. En referensparameter är en medinmodifieraren ,ref readonlyellerrefout. - Modifieraren
paramskan inte kombineras medthismodifieraren på en tilläggsmetod. - Modifieraren
paramskan 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.ParamArrayAttributeinte ellerSystem.Runtime.CompilerServices.ParamCollectionAttribute. Använd nyckelordetparamsi stället. - CS0758: Båda partiella metoddeklarationer måste använda en
paramsparameter, eller så kan ingen av dem använda enparamsparameter - 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
Addtar metoden enparamssamling av samma typ. - Kompilatorn genererar CS9224 när
Createmetoden för samlingstypen är mindre tillgänglig än den metod som tar parameternparamsfö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.