Chyby a upozornění související s modifikátorem params
parametrů metody
K příkazu a synchronizaci vláken dochází k několika chybámlock
:
- CS0225: Parametr parametru musí být jednorozměrné pole nebo musí mít platný typ kolekce.
- CS0231: Parametr parametru musí být posledním parametrem v seznamu formálních parametrů.
- CS0466: Metoda1 by neměla mít parametr params, protože metoda2 nemá
- CS0674: Nepoužívejte
System.ParamArrayAttribute
neboSystem.ParamArrayAttribute
/System.Runtime.CompilerServices.ParamCollectionAttribute
.params
Místo toho použijte klíčové slovo. - CS0758: Obě deklarace částečné metody musí používat
params
parametr nebo ani jeden parametrparams
- CS1104: Pole parametrů nelze použít s
this
modifikátorem v metodě rozšíření. - CS1611: Parametr parametrů nelze deklarovat jako in
ref
neboout
- CS1670:
params
V tomto kontextu není platný - CS1751: Nelze zadat výchozí hodnotu pole parametrů.
- CS9218: Argumenty typu metody nelze odvodit z použití, protože se používá argument s dynamickým typem a metoda má parametr kolekce parametrů bez pole. Zkuste explicitně zadat argumenty typu.
- CS9223: Vytvoření kolekce parametrů vede k nekonečnému řetězu vyvolání konstruktoru.
- CS9224: Metoda nemůže být méně viditelná než člen s kolekcí parametrů.
- CS9225: Konstruktor ponechá požadovaný člen neinicializovaný.
- CS9227: Typ neobsahuje definici vhodné metody instance
Add
. - CS9228: Typ kolekce parametrů bez pole musí mít použitelný konstruktor, který lze volat bez argumentů.
Pravidla deklarace metody
Následující chyby označují použití params
modifikátoru u parametru, pokud params
modifikátor není v tomto kontextu povolený:
- CS0231: Parametr parametru musí být posledním parametrem v seznamu formálních parametrů.
- CS1104: Pole parametrů nelze použít s
this
modifikátorem v metodě rozšíření. - CS1611: Parametr parametrů nelze deklarovat jako in
ref
neboout
- CS1670:
params
V tomto kontextu není platný - CS1751: Nelze zadat výchozí hodnotu pole parametrů.
Kompilátor vynucuje následující pravidla pro použití modifikátoru params
u parametru metody:
params
Modifikátor je povolen pouze u posledního parametru v seznamu formálních parametrů. To zahrnuje všechny parametry s výchozí hodnotou.- Při použití modifikátoru nelze pro parametr
params
zahrnout výchozí argument. params
Modifikátor nelze použít u parametru odkazu. Referenční parametr je jeden s modifikátoremin
,ref readonly
ref
neboout
modifikátorem.params
Modifikátor nelze kombinovat s modifikátoremthis
v metodě rozšíření.params
Modifikátor nelze použít u přetíženého operátoru.
Ve verzích starších než C# 12 params
nelze modifikátor použít u parametru anonymní metody nebo výrazu lambda.
Pravidla typu parametru a argumentu
Následující chyby značí, že typ parametru, se params
kterým se používá, je neplatný:
- CS9218: Argumenty typu metody nelze odvodit z použití, protože se používá argument s dynamickým typem a metoda má parametr kolekce parametrů bez pole. Zkuste explicitně zadat argumenty typu.
- CS0225: Parametr parametru musí být jednorozměrné pole nebo musí mít platný typ kolekce.
- CS9227: Typ neobsahuje definici vhodné metody instance
Add
. - CS9228: Typ kolekce parametrů bez pole musí mít použitelný konstruktor, který lze volat bez argumentů.
Ve verzích starších než C# 13 params
je modifikátor povolený pouze u jednorozměrných polí. Nebyly platné žádné jiné typy.
Počínaje jazykem C# 13 je možné použít libovolný platný typ kolekce. Některá omezení však zůstávají. Typ kolekce musí dodržovat stejná pravidla jako cíl výrazu kolekce.
Jiné chyby parametrů
Následující chyby označují další problémy s použitím modifikátoru params
:
- CS0466: Metoda1 by neměla mít parametr params, protože metoda2 nemá
- CS0674: Nepoužívejte
System.ParamArrayAttribute
neboSystem.Runtime.CompilerServices.ParamCollectionAttribute
.params
Místo toho použijte klíčové slovo. - CS0758: Obě deklarace částečné metody musí používat
params
parametr nebo ani jeden parametrparams
- CS9223: Vytvoření kolekce parametrů vede k nekonečnému řetězu vyvolání konstruktoru.
- CS9224: Metoda nemůže být méně viditelná než člen s kolekcí parametrů.
- CS9225: Konstruktor ponechá požadovaný člen neinicializovaný.
Metoda, která implementuje rozhraní, musí obsahovat params
modifikátor, pokud a pouze pokud člen rozhraní má params
modifikátor. Podobně obě deklarace partial
metody musí obsahovat params
modifikátor, nebo žádný nemůže obsahovat params
modifikátor.
Musíte použít params
modifikátor. Nemůžete použít ekvivalentní atributy ani System.ParamArrayAttribute System.Runtime.CompilerServices.ParamCollectionAttribute.
Kompilátor vygeneruje jednu z posledních tří chyb v předchozím seznamu, když je kód vygenerovaný pro vytvoření typu kolekce neplatný:
- Kompilátor generuje CS9223, když kód vygenerovaný k vytvoření kolekce obsahuje také kolekci parametrů stejného typu.
Add
Metoda obvykle přebíráparams
kolekci stejného typu. - Kompilátor generuje CS9224 , pokud
Create
metoda pro typ kolekce je méně přístupná než metoda, která přebíráparams
parametr typu kolekce. - Kompilátor generuje CS9225 , pokud má typ kolekce požadovaný člen a konstruktor bez parametrů inicializuje tento člen a má System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute v konstruktoru bez parametrů.