A metódusparaméterek módosítójára vonatkozó params hibák és figyelmeztetések

Az utasítással és a lock szálszinkronizálással kapcsolatos hibák:

  • CS0225: A params paraméternek egydimenziós tömbnek kell lennie, vagy érvényes gyűjteménytípussal kell rendelkeznie
  • CS0231: A params paraméternek egy formális paraméterlistában az utolsó paraméternek kell lennie.
  • CS0466: Az "1. módszer" nem rendelkezhet params paraméterrel, mivel a "method2" nem
  • CS0674: Ne használja System.ParamArrayAttribute vagy System.ParamArrayAttribute/System.Runtime.CompilerServices.ParamCollectionAttribute. Használja inkább a kulcsszót params .
  • CS0758: Mindkét részleges metódusdeklarációnak paramétert params kell használnia, vagy egyik sem használhat paramétert params
  • CS1104: A paramétertömb nem használható módosítóval this bővítménymetóduson.
  • CS1611: A params paraméter nem deklarálható refout
  • CS1670: params nem érvényes ebben a környezetben
  • CS1751: Paramétertömb alapértelmezett értéke nem adható meg.
  • CS9218: A metódus típusargumentumai nem vonhatók ki a használatból, mert dinamikus típusú argumentumot használ, és a metódus nem tömbparaméter-gyűjtési paraméterrel rendelkezik. Próbálja meg explicit módon megadni a típusargumentumokat.
  • CS9223: A params gyűjtemény létrehozása a konstruktor meghívásának végtelen láncát eredményezi.
  • CS9224: A metódus nem lehet kevésbé látható, mint a params gyűjteményt tartalmazó tag.
  • CS9225: A konstruktor nem inicializálva hagyja a szükséges tagot.
  • CS9227: A típus nem tartalmaz megfelelő példánymetódus Add definícióját.
  • CS9228: A nem tömbparamok gyűjteménytípusának olyan konstruktorral kell rendelkeznie, amely argumentumok nélkül hívható meg.

Metódusdeklarációs szabályok

Az alábbi hibák azt jelzik, hogy módosító használata params egy paraméteren, ha a módosító nem engedélyezett ebben a params környezetben:

  • CS0231: A params paraméternek egy formális paraméterlistában az utolsó paraméternek kell lennie.
  • CS1104: A paramétertömb nem használható módosítóval this bővítménymetóduson.
  • CS1611: A params paraméter nem deklarálható refout
  • CS1670: params nem érvényes ebben a környezetben
  • CS1751: Paramétertömb alapértelmezett értéke nem adható meg.

A fordító a következő szabályokat kényszeríti ki a params módosító metódusparaméteren való használatára:

  • A params módosító csak a formális paraméterlista utolsó paraméterén engedélyezett. Ide tartoznak az alapértelmezett értékkel rendelkező paraméterek.
  • A módosító használatakor nem lehet alapértelmezett argumentumot megadni a params paraméterhez.
  • A params módosító nem alkalmazható a referenciaparaméterre. A referenciaparaméter az , ref readonlyvagy ref out módosítóval rendelkező inparaméter.
  • A params módosító nem kombinálható a this módosítóval bővítménymetóduson.
  • A params módosító nem használható túlterhelt operátorokon.

A C# 12 előtti verziókban a params módosító nem használható névtelen metódus vagy lambda kifejezés paraméterén.

Paraméter- és argumentumtípus-szabályok

A következő hibák azt jelzik, hogy a használt params paraméter típusa érvénytelen:

  • CS9218: A metódus típusargumentumai nem vonhatók ki a használatból, mert dinamikus típusú argumentumot használ, és a metódus nem tömbparaméter-gyűjtési paraméterrel rendelkezik. Próbálja meg explicit módon megadni a típusargumentumokat.
  • CS0225: A params paraméternek egydimenziós tömbnek kell lennie, vagy érvényes gyűjteménytípussal kell rendelkeznie
  • CS9227: A típus nem tartalmaz megfelelő példánymetódus Add definícióját.
  • CS9228: A nem tömbparamok gyűjteménytípusának olyan konstruktorral kell rendelkeznie, amely argumentumok nélkül hívható meg.

A C# 13 előtti verziókban a params módosító csak egydimenziós tömbökön engedélyezett. Más típus nem érvényes.

A C# 13-tól kezdve bármilyen érvényes gyűjteménytípus használható. Bizonyos korlátozások azonban továbbra is érvényben maradnak. A gyűjteménytípusnak ugyanazokat a szabályokat kell követnie, mint egy gyűjteménykifejezés céljának.

Egyéb paramhibák

Az alábbi hibák a módosító használatával params kapcsolatos egyéb problémákat jeleznek:

  • CS0466: Az "1. módszer" nem rendelkezhet params paraméterrel, mivel a "method2" nem
  • CS0674: Ne használja System.ParamArrayAttribute vagy System.Runtime.CompilerServices.ParamCollectionAttribute. Használja inkább a kulcsszót params .
  • CS0758: Mindkét részleges metódusdeklarációnak paramétert params kell használnia, vagy egyik sem használhat paramétert params
  • CS9223: A params gyűjtemény létrehozása a konstruktor meghívásának végtelen láncát eredményezi.
  • CS9224: A metódus nem lehet kevésbé látható, mint a params gyűjteményt tartalmazó tag.
  • CS9225: A konstruktor nem inicializálva hagyja a szükséges tagot.

Az illesztőt implementáló metódusnak tartalmaznia kell a params módosítót, ha és csak akkor, ha az interfésztag rendelkezik a params módosítóval. Hasonlóképpen, egy metódus mindkét deklarációjának tartalmaznia partial kell a params módosítót, vagy egyik sem tartalmazhatja a params módosítót.

A módosító használata params kötelező. A megfelelő attribútumok sem alkalmazhatók.System.ParamArrayAttribute System.Runtime.CompilerServices.ParamCollectionAttribute

A fordító az előző listában az utolsó három hiba egyikét generálja, ha a gyűjteménytípus létrehozásához létrehozott kód érvénytelen:

  • A fordító CS9223-at bocsát ki, amikor a gyűjtemény létrehozásához kibocsátott kód egy azonos típusú paramgyűjteményt is tartalmaz. A metódus általában Add azonos típusú gyűjteményt params használ.
  • A fordító CS9224-et bocsát ki, ha a Create gyűjteménytípus metódusa kevésbé érhető el, mint a gyűjteménytípus paraméterét használó params metódus.
  • A fordító CS9225-öt bocsát ki, ha a gyűjteménytípusnak van egy kötelező tagja, és a paraméter nélküli konstruktor nem inicializálja a tagot, és a System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute paraméter nélküli konstruktoron van.

Lásd még