Sdílet prostřednictvím


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 nebo System.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 parametr params
  • CS1104: Pole parametrů nelze použít s this modifikátorem v metodě rozšíření.
  • CS1611: Parametr parametrů nelze deklarovat jako in ref nebo out
  • 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 nebo out
  • 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átorem in, ref readonlyref nebo out modifikátorem.
  • params Modifikátor nelze kombinovat s modifikátorem this 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 nebo 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 parametr params
  • 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ů.

Viz také