Paraméter- és argumentumeltérés

A fordító a következő hibákat generálja, ha nincs megadva argumentum egy formális paraméterhez, vagy ha az argumentum nem érvényes az adott paraméterre:

  • CS0182: Az attribútumargumentumnak egy attribútumparaméter típusú állandó kifejezésnek, typeof kifejezésnek vagy tömblétrehozó kifejezésnek kell lennie
  • CS0591: Érvénytelen érték az argumentumhoz
  • CS0599: Érvénytelen érték a(z) "argumentum" nevű attribútumhoz
  • CS0617: Nem érvényes elnevezett attribútumargumentum. Az elnevezett attribútumargumentumoknak olyan mezőknek kell lenniük, amelyek nem readonly, statikusak, vagy constok, vagy írás-olvasási tulajdonságok, amelyek publikusak és nem statikusak.
  • CS0633: Az attribútum argumentumának érvényes azonosítónak kell lennie
  • CS0643: Ismétlődő névvel ellátott attribútumargumentum
  • CS0655: Érvénytelen elnevezett attribútumargumentum, mert nem érvényes attribútumparaméter-típus,
  • CS0839: hiányzik argumentum.
  • CS1016: Nevezett attribútumargumentum várható
  • CS1739: A legjobb túlterhelés nem rendelkezik nevű paraméterrel
  • CS1740: Nevesített argumentum nem adható meg többször
  • CS1742: Egy tömbelérés nem rendelkezhet elnevezett argumentum-megjelölővel
  • CS1744: Elnevezett argumentum azt a paramétert adja meg, amelyhez már kapott pozícióargumentumot
  • CS1746: A meghatalmazottnak nincs "name" nevű paramétere
  • CS7036: Nincs olyan argumentum, amely megfelel a szükséges paraméternek
  • CS7067: Attribútumkonstruktor paraméter nem kötelező, de nincs megadva alapértelmezett paraméterérték.
  • CS8324: Elnevezett argumentum-specifikációknak meg kell jelenniük, miután az összes rögzített argumentumot dinamikus meghívásban adták meg.
  • CS8905: A függvénymutató nevesített argumentumokkal nem hívható meg.
  • CS8943: null nem érvényes paraméternév. Egy példánymetódus fogadójához való hozzáféréshez használja az üres sztringet paraméternévként.
  • CS8944: A metódus nem példánymetódus, a fogadó nem lehet interpolált sztringkezelő argumentum.
  • CS8945: Érvénytelen paraméternév.
  • CS8948: InterpolatedStringHandlerArgumentAttribute argumentumok nem hivatkozhatnak arra a paraméterre, amelyen az attribútumot használják.
  • CS8949: A paraméterre alkalmazott InterpolatedStringHandlerArgumentAttribute helytelenül formázott, és nem értelmezhető. Hozzon létre egy példányt manuálisan.
  • CS8950: A paraméter egy argumentum az interpolált karaktersor-kezelő konverziójához, de a megfelelő argumentum az interpolált karaktersor kifejezés után van megadva. Rendezze át az argumentumokat.
  • CS8951: A paraméter nincs explicit módon megadva, hanem argumentumként használatos a paraméter interpolált sztringkezelőjének konvertálásához.
  • CS8964: A CallerArgumentExpressionAttribute csak az alapértelmezett értékekkel rendelkező paraméterekre lehet alkalmazni
  • CS8965: A paraméterre alkalmazott CallerArgumentExpressionAttribute nem lesz hatása, mert önhivatkozó.
  • CS8966: A CallerArgumentExpressionAttribute nem lesz hatással, mert olyan környezetben használt tagra vonatkozik, amely nem engedélyezi az opcionális argumentumokat

Hiányzó argumentum

A rendszer a következő általános hibákat adja ki, ha a fordító nem tud argumentumokat egyeztetni az összes tagparaméterhez:

  • CS0839: hiányzik argumentum.
  • CS7036: Nincs olyan argumentum, amely megfelel a szükséges paraméternek

Ezek a hibák általánosak: A fordító nem tudja összepárosítani a metódushívásban megadott argumentumokat a metódus kötelező paramétereivel. Ellenőrizze az alábbi okokat:

  • Győződjön meg arról, hogy az összes szükséges argumentumot tartalmazza.
  • Győződjön meg arról, hogy az argumentumok a megfelelő sorrendben vannak.
  • Győződjön meg arról, hogy az összes argumentum a megfelelő típus.
  • Győződjön meg arról, hogy a túlterhelés feloldási szabályai a várt módszert választották.

Előfordulhat, hogy CS7036 is megjelenik, ha túlterhelt helyi függvényeket írt. A helyi függvények nem terhelhetők túl. A fordító csak az első helyi függvényt ismeri fel ezzel a névvel. Ellenőrizze, hogy egy másik helyi függvényt szeretne-e meghívni.

Ezek a hibák gyakran más diagnosztikával is megjelennek, amelyek segíthetnek a helyes ok diagnosztizálásában.

Attribútumok argumentumai

A fordító ezeket a hibákat akkor állítja ki, ha egy attribútumkonstruktor argumentuma helytelen:

  • CS0182: Az attribútumargumentumnak állandó kifejezésnek, typeof kifejezésnek vagy tömblétrehozó kifejezésnek kell lennie egy attribútumparaméter-típusú kifejezés részeként
  • CS0591: Érvénytelen érték az argumentumhoz
  • CS0599: Érvénytelen érték a 'nevű attribútum' argumentum számára
  • CS0617: Érvénytelen elnevezett attribútum argumentum. Az elnevezett attribútumargumentumoknak olyan mezőknek vagy írás/olvasási jogú tulajdonságoknak kell lenniük, amelyek nem readonly, nem statikusak, és nem const értékek, továbbá nyilvánosak és nem statikusak.
  • CS0633: Az attribútum argumentumának érvényes azonosítónak kell lennie
  • CS0643: Névvel ellátott attribútumargumentum ismétlődése
  • CS0655: nem érvényes elnevezett attribútumargumentum, mert nem érvényes attribútumparaméter-típus,

Ha az attribútumdefinícióban használja a System.AttributeUsageAttribute, győződjön meg arról, hogy az engedélyezett értékek nem zárják ki egymást. Ellenőrizze, hogy az attribútum argumentumainak típusa és sorrendje helyes-e. Győződjön meg arról, hogy a sztringargumentumok szövege érvényes. Számos attribútum esetében az argumentumnak érvényes C# azonosítónak kell lennie. Az attribútumkonstruktorok argumentumainak fordítási időállandóknak kell lenniük. Ezért csak azokat a típusokat használhatják, amelyek konstansokat támogatnak. Emellett az alábbi, szó szerinti konstansokat engedélyező típusok attribútumparaméterekként nem engedélyezettek:

Nem adhatja meg az azonos paraméternévvel rendelkező ismétlődő elnevezett argumentumokat. Az akadálymentes tulajdonságokat csak attribútum inicializálásakor állíthatja be. Nem állíthat be privát tulajdonságokat.

Elnevezett és választható paraméterek és argumentumok

A fordító a következő hibákat állítja ki a névvel ellátott és választható argumentumok helytelen használata esetén:

  • CS1016: Elnevezett attribútum argumentuma várható
  • CS1739: A legjobb túlterhelés nem rendelkezik nevű paraméterrel
  • CS1740: Nevesített argumentum nem adható meg többször
  • CS1742: Egy tömbelérés nem rendelkezhet elnevezett argumentum-megjelölővel
  • CS1744: Elnevezett argumentum azt a paramétert adja meg, amelyhez már kapott pozícióargumentumot
  • CS1746: A meghatalmazott nem rendelkezik "name" nevű paraméterrel
  • CS7067: Attribútumkonstruktor paraméter nem kötelező, de nincs megadva alapértelmezett paraméterérték.
  • CS8324: Elnevezett argumentum-specifikációknak meg kell jelenniük, miután az összes rögzített argumentumot dinamikus meghívásban adták meg.
  • CS8905: A függvénymutató nevesített argumentumokkal nem hívható meg.

Ellenőrizze a hibák következő okait:

  • A névvel ellátott argumentum paraméterneve helytelen.
  • A választott túlterhelés nem rendelkezik az elnevezett argumentumnak megfelelő paraméterrel.
  • A paraméternév több argumentumon is ismétlődik.
  • A névvel ellátott argumentumok után megjelenik egy pozícióbeli (névtelen) argumentum.
  • A tömbindex-paraméterek nevesített argumentumai nem engedélyezettek.

Interpolált karakterlánc-kezelő

A fordító a következő hibákat adja ki, amikor helytelenül adott meg egy interpolált sztringkezelőt.

  • CS8943: null nem érvényes paraméternév. Egy példánymetódus fogadójához való hozzáféréshez használja az üres sztringet paraméternévként.
  • CS8944: Nem egy példány metódus, a fogadó nem lehet interpolált sztringkezelő argumentum.
  • CS8945: Érvénytelen paraméternév.
  • CS8948: InterpolatedStringHandlerArgumentAttribute argumentumok nem hivatkozhatnak arra a paraméterre, amelyen az attribútumot használják.
  • CS8949: A paraméterre alkalmazott InterpolatedStringHandlerArgumentAttribute helytelenül formázott, és nem értelmezhető. Hozzon létre manuálisan egy példányt.
  • CS8950: A paraméter az interpolált karakterlánc kezelőjének paraméteren történő konvertálásához használt argumentum, de a megfelelő paraméter az interpolált karakterlánc kifejezés után van megadva.
  • CS8951: A paraméter nincs explicit módon megadva, hanem argumentumként használatos a paraméter interpolált sztringkezelőjének konvertálásához.

Az interpolált sztringkezelő egy mintaalapú szerkezet. Az a fontos, hogy pontos legyen a minta. Tekintse meg az egyéni interpolált sztringkifejezés-kezelők C# nyelvspecifikációs szakaszát, vagy kövesse az interpolált sztringkezelők létrehozására vonatkozó oktatóanyagot.

A hívó hibakeresési információi

A fordító a következő hibát adja ki a System.Runtime.CompilerServices.CallerArgumentExpressionAttributehelytelen használata esetén:

  • CS8964: A CallerArgumentExpressionAttribute csak az alapértelmezett értékekkel rendelkező paraméterekre lehet alkalmazni

Emellett a fordító a következő figyelmeztetéseket adja ki a CallerArgumentExpressionAttributehelytelen használatával kapcsolatban:

  • CS8965: A paraméterre alkalmazott CallerArgumentExpressionAttribute nem lesz hatással, mert önhivatkozó.
  • CS8966: A CallerArgumentExpressionAttribute nem lesz hatással, mert olyan környezetekben használt tagra vonatkozik, amelyek nem teszik lehetővé az opcionális argumentumokat

Az CallerArgumentExpression attribútummal jegyzett paramétereknek alapértelmezett értékkel kell rendelkezniük.