Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk a következő fordítóhibákat ismerteti:
- CS0181: Az attribútumkonstruktor paraméter típusa nem érvényes attribútumparaméter-típus
- CS0243: A feltételes attribútum érvénytelen a metóduson, mert felülbírálási módszer.
- CS0404: Az attribútum nem érvényes ebben a deklarációtípusban.
- CS0415: Ez az attribútum csak olyan indexelőn érvényes, amely nem explicit felülettag-deklaráció.
- CS0416: "típusparaméter": egy attribútumargumentum nem használhat típusparamétereket.
- CS0447: Az attribútum nem használható típusargumentumokkal.
- CS0577: A feltételes attribútum érvénytelen, mert konstruktor, destruktor, operátor, lambda kifejezés vagy explicit felületi implementáció.
- CS0578: A feltételes attribútum érvénytelen a függvényen, mert a visszatérési típusa nem érvénytelen.
- CS0579: Duplikált attribútum
- CS0582: A feltételes attribútum nem érvényes a felülettagokon.
- CS0592: Az attribútum nem érvényes ebben a deklarációtípusban. Ez csak adott deklarációkra érvényes.
- CS0609: Nem állítható be az attribútum egy felülírással megjelölt indexelő tulajdonságon.
- CS0616: A típus nem attribútumosztály
- CS0625: A StructLayout(LayoutKind.Explicit) jelöléssel ellátott típusokban lévő példánymezőknek rendelkezniük kell FieldOffset attribútummal.
- CS0629: A feltételes tag "tag" nem tudja implementálni az "alaposztály tag" illesztőtagot a típusnév típusában.
- CS0636: A FieldOffset attribútum csak a StructLayout(LayoutKind.Explicit) elemekkel megjelölt típusok tagjaira helyezhető.
- CS0637: A FieldOffset attribútum statikus vagy const mezőkön nem engedélyezett.
- CS0641: Ez az attribútum csak a System.Attribútumból származtatott osztályokra érvényes.
- CS0646: Nem adható meg a DefaultMember attribútum egy indexelőt tartalmazó típuson.
- CS0647: Hibát okozó attribútum
- CS0653: Az "osztály" attribútumosztály nem alkalmazható, mert absztrakt.
- CS0657: A hely nem érvényes attribútumhely a deklarációhoz. A deklaráció érvényes attribútumhelyei szerepelnek a listában. A blokk összes attribútuma figyelmen kívül lesz hagyva.
- CS0658: A hely nem felismert attribútumhely. A deklaráció érvényes attribútumhelyei szerepelnek a listában. A blokk összes attribútuma figyelmen kívül lesz hagyva.
- CS0668: Két indexelő neve eltérő; az IndexerName attribútumot azonos névvel kell használni minden indexelőn egy típuson belül
- CS0685: A feltételes tag "tag" nem rendelkezhet kimenő paramétersel.
- CS0735: A TypeForwardedTo attribútum argumentumaként megadott típus érvénytelen
- CS0739: Duplicate TypeForwardedToAttribute
- CS1608: A RequiredAttribute attribútum nem engedélyezett C#-típusok esetén
- CS1614: Az attribútum neve nem egyértelmű. Használja a "@name" szöveget, vagy explicit módon adja meg az "Attribútum" utótagot.
- CS1618: Nem hozható létre delegált egy metódussal, mert a metódus vagy a felülbírált metódus feltételes attribútummal rendelkezik
- CS1667: Az attribútum nem érvényes a tulajdonság- vagy eseménykiegészítőkre. Ez csak adott deklarációkra érvényes.
- CS1689: Az attribútum csak metódusokon vagy attribútumosztályokon érvényes
- CS7014: Az attribútumok ebben a környezetben nem érvényesek.
- CS7046: Attribútumparamétert kell megadni.
- CS7047: A "parameter1" vagy a "parameter2" attribútumparamétert meg kell adni.
- CS7067: Az attribútumkonstruktor paraméter nem kötelező, de nincs megadva alapértelmezett paraméterérték.
- CS8959: A CallerArgumentExpressionAttribute nem alkalmazható, mert nincs szabványos átalakítás az 1. típusról a 2. típusra
- CS8960: A paraméterre alkalmazott CallerArgumentExpressionAttribute függvénynek nincs hatása. Ezt a CallerLineNumberAttribute felülbírálja.
- CS8961: A paraméterre alkalmazott CallerArgumentExpressionAttribute nem lesz hatással. Ezt felülbírálja a CallerFilePathAttribute.
- CS8962: A paraméterre alkalmazott CallerArgumentExpressionAttribute függvénynek nincs hatása. Ezt felülbírálja a CallerMemberNameAttribute.
- CS8963: A paraméterre alkalmazott CallerArgumentExpressionAttribute függvénynek nincs hatása. Érvénytelen paraméternévvel alkalmazza a rendszer.
- CS8968: Egy attribútumtípus argumentuma nem használhat típusparamétereket
- CS8970: Ebben a környezetben nem használható típus, mert nem jeleníthető meg metaadatokban.
- CS9331: Az attribútum nem alkalmazható manuálisan.
Attribútumargumentumok és paraméterek
Az attribútumargumentumok vagy paraméterek helytelen használata esetén a következő hibák jelennek meg:
- CS0181: Az attribútumkonstruktor paraméter típusa nem érvényes attribútumparaméter-típus
- CS0416: "típusparaméter": egy attribútumargumentum nem használhat típusparamétereket.
- CS0447: Az attribútum nem használható típusargumentumokkal.
- CS0647: Hiba történt az attribútum kibocsátásakor
- CS7046: Attribútumparamétert kell megadni.
- CS7047: A "parameter1" vagy a "parameter2" attribútumparamétert meg kell adni.
- CS7067: Az attribútumkonstruktor paraméter nem kötelező, de nincs megadva alapértelmezett paraméterérték.
- CS8968: Egy attribútumtípus argumentuma nem használhat típusparamétereket
- CS8970: Ebben a környezetben nem használható típus, mert nem jeleníthető meg metaadatokban.
A hibák kijavításához kövesse az alábbi szabályokat:
- Az attribútumkonstruktor paramétereinek érvényes attribútumparaméter-típusokat (CS0181) kell használniuk. A C#-nyelv specifikációja az attribútumparaméter-típusokat primitív típusokra (
bool, ,byte,chardouble,float,intlong,shortésstring),object,System.Typeszámtípusokra és egydimenziós tömbökre korlátozza. A függvénymutatók és a metaadatokban nem ábrázolható egyéb típusok érvénytelen attribútumparaméter-típusok. - Az attribútumargumentumoknak fordítási idejű állandó értékeknek kell lenniük, ezért nem használhat típusparamétereket attribútumargumentumként (CS0416). A fordítónak fordításkor fel kell oldania az attribútumargumentumokat, és a típusparaméterek csak az általános típus létrehozása után lesznek ismertek.
- Nem alkalmazhat típusargumentumokat nem általános attribútumokra (CS0447). Ha egy attribútumosztály nem általános, a használata nem tartalmazhat típusargumentumokat szögletes zárójelekben.
- Az attribútumkonstruktornak átadott összes értéket megfelelően kell formázni, és az egyes paraméterek (CS0647) érvényes tartományán belül kell lennie. Például egy érvényes GUID formátumú sztringre GuidAttribute van szükség.
- Az attribútum alkalmazásakor meg kell adnia az összes szükséges attribútumparamétert (CS7046, CS7047). Ellenőrizze az attribútum konstruktor-aláírását annak meghatározásához, hogy mely paraméterek kötelezőek, és adjon meg érvényes argumentumokat az egyes paraméterekhez.
- Ha egyéni attribútumot határoz meg opcionális konstruktorparaméterekkel, adja meg a paraméterek alapértelmezett értékeit (CS7067). Használja a szintaxist
parameterType parameterName = defaultValueaz attribútumkonstruktorban, hogy a hívók kihagyhassák ezeket az argumentumokat. - Az általános attribútumtípus-argumentumoknak konkrét típusoknak kell lenniük, nem pedig típusparamétereknek (CS8968). A fordítónak teljes mértékben meg kell határoznia az általános attribútumtípus-argumentumokat fordításkor, ezért a nyitott típusparaméterek nem engedélyezettek.
- Az attribútumargumentumként használt típusoknak a metaadatokban (CS8970) ábrázolhatóknak kell lenniük. Egyes felépített típusok, például azokat, amelyek magukban foglalnak
dynamicvagy bizonyos vonáselemneveket, nem kódolhatók metaadatokba, és attribútumtípus-argumentumként nem használhatók.
További információ: Attribútumok, Általános adatok és A C# nyelv specifikációja szakasz az attribútumokról.
Megjegyzés:
A CS0447 és a CS0647 elavult. Az aktuális fordító nem bocsát ki ilyen hibákat.
Attribútumosztály követelményei
A következő hibák jelennek meg, amikor olyan attribútumosztályokat határoz meg, amelyek nem felelnek meg a szükséges korlátozásoknak:
- CS0404: Az attribútum nem érvényes ebben a deklarációtípusban.
- CS0579: Duplikált attribútum
- CS0616: A típus nem attribútumosztály
- CS0641: Ez az attribútum csak a System.Attribútumból származtatott osztályokra érvényes.
- CS0653: Az "osztály" attribútumosztály nem alkalmazható, mert absztrakt.
- CS1614: Az attribútum neve nem egyértelmű. Használja a "@name" szöveget, vagy explicit módon adja meg az "Attribútum" utótagot.
A hibák kijavításához kövesse az alábbi szabályokat:
- Attribútumok csak az attribútum AttributeUsageAttribute által engedélyezett deklarációtípusokra alkalmazhatók (CS0404). Ellenőrizze az
AttributeTargetsattribútumbanAttributeUsagemegadott értéket, és ellenőrizze, hogy mely célok érvényesek. - Ha ugyanazt az attribútumot többször alkalmazza egyetlen célhelyre, távolítsa el a duplikált értéket, vagy állítsa be
AllowMultiple = trueaz attribútumban AttributeUsageAttribute (CS0579). Alapértelmezés szerint az attribútumok csak egyszer jelenhetnek meg minden célhelyen. - Az attribútumszintaxisban használt típusnak a System.Attribute kell örökölnie. Attribútumként csak a származtatott
System.Attributeosztályok használhatók. Más típusok akkor is okozhatják ezt a hibát, ha hasonló nevűek. - A AttributeUsageAttribute csak az
Attributeosztályokra alkalmazható, amelyek a CS0641-ből származnak. AzAttributeUsageattribútum szabályozza az egyéb attribútumok használatát, és önmagában az attribútumosztályokra korlátozódik. - Az attribútumosztályok nem lehetnek
abstract, mert a fordítónak példányosítania kell őket (CS0653). Távolítsa el aabstractmódosítót az attribútumosztályból, vagy származtatott egy konkrét osztályt az absztrakt alapból. - Ha mindkét
ExampleésExampleAttributeattribútumosztály létezik, a fordító nem tudja meghatározni, hogy melyikre[Example]hivatkozik (CS1614). Használja a[@Example]jelölést a rövidebb névhez, vagy a[ExampleAttribute]jelölést a hosszabb névhez az egyértelműség érdekében.
További információ: Egyéni attribútumok létrehozása és az attribútumok C# nyelvspecifikációs szakasza.
Attribútum helyének környezete
Az alábbi hibák akkor fordulnak elő, ha attribútumokat alkalmaz érvénytelen helyeken, vagy helytelen céljelölőket használ:
- CS0592: Az attribútum nem érvényes ebben a deklarációtípusban. Ez csak adott deklarációkra érvényes.
- CS0657: A hely nem érvényes attribútumhely a deklarációhoz. A deklaráció érvényes attribútumhelyei szerepelnek a listában. A blokk összes attribútuma figyelmen kívül lesz hagyva.
- CS0658: A hely nem felismert attribútumhely. A deklaráció érvényes attribútumhelyei szerepelnek a listában. A blokk összes attribútuma figyelmen kívül lesz hagyva.
- CS1667: Az attribútum nem érvényes a tulajdonság- vagy eseménykiegészítőkre. Ez csak adott deklarációkra érvényes.
- CS7014: Az attribútumok ebben a környezetben nem érvényesek.
A hibák kijavításához kövesse az alábbi szabályokat. További információ: Attribútumcélok és az attribútumspecifikáció C# nyelvspecifikációs szakasza.
- Minden attribútum meghatározza, AttributeUsageAttribute hogy milyen deklarációtípusokat céloz meg. Az attribútumot csak ezekre a típusokra (CS0592) kell alkalmaznia. Például egy osztályhoz
AttributeTargets.Interfacedefiniált attribútum nem alkalmazható. - Ha olyan attribútum-céljelölőt használ, mint a
method:vagyproperty:, a kijelölőnek érvényesnek kell lennie arra a deklarációra, amelyben megjelenik (CS0657). Ellenőrizze a hibaüzenetet, hogy mely céljelölők engedélyezettek az adott deklarációhoz. - A használt attribútum-célkijelölő nem felismert kijelölő (CS0658). Az érvényes meghatározók közé tartozik a
assembly:,module:,type:,method:,property:field:,event:, ,param:ésreturn:. - Egyes attribútumok, például ObsoleteAttribute és CLSCompliantAttribute, nem érvényesek a tulajdonság- vagy eseménykiegészítőkre (CS1667). Helyezze át az attribútumot a tartozékból magához a tulajdonsághoz vagy eseménydeklarációhoz.
- Az attribútumok csak az őket támogató programelemeken (CS7014) jelennek meg. Ha szerelvényszintű vagy modulszintű attribútumokat alkalmaz, használja a vagy a
assembly:module:céljelölőket, és helyezze őket a fájl tetejére.
Előre definiált attribútumok
A következő hibák akkor fordulnak elő, ha adott előre definiált .NET-attribútumokat helytelenül használ:
- CS0415: Ez az attribútum csak olyan indexelőn érvényes, amely nem explicit felülettag-deklaráció.
- CS0609: Nem állítható be az attribútum egy felülírással megjelölt indexelőre.
- CS0625: A StructLayout(LayoutKind.Explicit) jelöléssel ellátott típusokban az példánymezőknek rendelkezniük kell FieldOffset attribútummal.
- CS0636: A FieldOffset attribútum csak a StructLayout(LayoutKind.Explicit) elemekkel megjelölt típusok tagjaira helyezhető.
- CS0637: A FieldOffset attribútum statikus vagy const mezőkön nem engedélyezett.
- CS0646: Nem adható meg a DefaultMember attribútum egy indexelőt tartalmazó típuson.
- CS0668: Két indexelő neve eltérő; az IndexerName attribútumot azonos névvel kell használni minden indexelőn egy típuson belül
- CS0735: A TypeForwardedTo attribútum argumentumaként megadott típus érvénytelen
- CS0739: Duplicate TypeForwardedToAttribute
- CS1608: A RequiredAttribute attribútum nem engedélyezett C#-típusok esetén
- CS9331: Az attribútum nem alkalmazható manuálisan.
A hibák kijavításához kövesse az alábbi szabályokat. További információt az Indexelők, a StruktúratípusokTypeForwardedToAttribute és a Platformhívás (P/Invoke) című témakörben talál.
- Ez IndexerNameAttribute csak olyan indexelőkre alkalmazható, amelyek nem explicit felülettag-deklarációk (CS0415). Távolítsa el az attribútumot az explicit felület indexelőiből, mert az illesztő már definiálja az indexelő nevét.
- Nem lehet alkalmazni a
IndexerNamemegjelölt indexelőkreoverride, mert a felülírt indexelők az alaposztálytól öröklik a nevét (CS0609). Távolítsa el azIndexerNameattribútumot a felülbírálási indexelőből. - A
StructLayout(LayoutKind.Explicit)jelöléssel ellátott típus minden példánymezőjének rendelkeznie kell egy FieldOffsetAttribute-vel (CS0625). Az explicit elrendezés igényli, hogy megadja az egyes példánymezők bájteltolását. - A FieldOffsetAttribute csak olyan típusok tagjaira helyezhető, amelyeknek StructLayoutAttribute értéke
LayoutKind.Explicit(CS0636). Adja hozzá azStructLayoutattribútumot a típusdeklarációhoz. - A
FieldOffsetattribútum nem engedélyezett astaticvagyconstmezőkön, mert az explicit elrendezés csak a példánymezőkre (CS0637) vonatkozik. Távolítsa el azFieldOffsetattribútumot a statikus vagy a const mezőből. - Nem alkalmazható olyan típusra DefaultMemberAttribute , amely már tartalmaz indexelőt, mert a fordító automatikusan meghatározza az indexelőkkel rendelkező típusok alapértelmezett tagját (CS0646). Távolítsa el a
DefaultMemberattribútumot. - A típuson belüli összes IndexerNameAttribute attribútumnak ugyanazt a nevet kell megadnia (CS0668). Módosítsa a neveket egyezőre, mert a futtatókörnyezet egyetlen nevet használ egy típus összes indexelőjéhez.
- Az argumentumként megadott TypeForwardedToAttribute típusnak nem általánosnak, nem beágyazottnak, nem mutatónak, és nem tömbnek kell lennie (CS0735). Csak a legfelső szintű elnevezett típusok érvényesek a továbbítási célokra.
- Egy szerelvény csak egy TypeForwardedToAttribute külső típushoz (CS0739) tartozhat. Keresse meg és távolítsa el az ismétlődő deklarációt
TypeForwardedTo. - A RequiredAttributeAttribute C#-ban (CS1608) definiált típusok esetében ez nem engedélyezett. Ez az attribútum más nyelvek számára van fenntartva, amelyek egy adott funkció megkövetelésére kényszerítik a fordítókat.
- Egyes attribútumok a fordító számára vannak fenntartva, és nem alkalmazhatók manuálisan a forráskódban (CS9331). Cserélje le az attribútumot az azzal egyenértékű C# nyelvszintaxisra, amely miatt a fordító létrehozza azt.
Feltételes attribútumok használata
A használati korlátozásokat megsértő módok alkalmazásakor a ConditionalAttribute következő hibák jelentkeznek:
- CS0243: A feltételes attribútum érvénytelen a metóduson, mert felülbírálási módszer.
- CS0577: A feltételes attribútum érvénytelen, mert konstruktor, destruktor, operátor, lambda kifejezés vagy explicit felületi implementáció.
- CS0578: A feltételes attribútum érvénytelen a függvényen, mert a visszatérési típusa nem érvénytelen.
- CS0582: A feltételes attribútum nem érvényes a felülettagokon.
- CS0629: A feltételes tag "tag" nem tudja implementálni az "alaposztály tag" illesztőtagot a típusnév típusában.
- CS0685: A feltételes tag "tag" nem rendelkezhet kimenő paramétersel.
- CS1618: Nem hozható létre delegált metódussal, mert az vagy a felülbírált metódus feltételes attribútummal rendelkezik
- CS1689: Az attribútum csak metódusokon vagy attribútumosztályokon érvényes
A hibák kijavításához kövesse az alábbi szabályokat. További információ: ConditionalAttributefeltételes metódusok és attribútumok.
- A fordító nem a felülbíráláshoz, hanem az alapmetódus-deklarációhoz köti a hívásokat, így az attribútum nem alkalmazható
Conditionalmetódusokra (CS0243). Távolítsa el az attribútumot aConditionalfelülbírálási módszerből, vagy távolítsa el a kulcsszótoverride. - Az
Conditionalattribútum nem érvényes konstruktorokra, véglegesítőkre, operátorokra, lambdakifejezésekre vagy explicit felületi implementációkra (CS0577). Ezek a tagtípusok nem hagyhatók ki feltételesen, mert kötelező szerepkörök vannak a típus életciklusában vagy szerződésében. - A feltételes metódusokat vissza kell adni
void, mert előfordulhat, hogy a fordító teljes egészében kihagyja a hívást, és a hívó számára nem lesz elérhető visszatérési érték (CS0578). Módosítsa a metódus visszatérési típusátvoid-re, vagy távolítsa el aConditionalattribútumot. - A felülettagok nem lehetnek feltételesek, mert minden illesztőtagot végre kell hajtani (CS0582). Távolítsa el az
Conditionalattribútumot a felülettag-deklarációból. - Az interfésztagokat megvalósító metódusok nem lehetnek feltételesek, mert az interfészszerződés megköveteli, hogy az összes buildben (CS0629) jelen legyenek. Távolítsa el az
Conditionalattribútumot a implementálási módszerből. - A feltételes metódusok nem tartalmazhatnak
outparamétereket, mert aoutváltozó értéke nem lesz meghatározva, ha a fordító kihagyja a metódushívást (CS0685). Távolítsa el aoutparamétereket a metódusból, vagy távolítsa el azConditionalattribútumot. - Nem hozhat létre feltételes metódusra hivatkozó meghatalmazottat, mert előfordulhat, hogy a metódus nem létezik olyan buildekben, amelyekben nincs megadva a feltételszimbólum (CS1618). Távolítsa el az
Conditionalattribútumot a metódusból, vagy ne használja delegált célként. - Az
Conditionalattribútum csak metódusokon és attribútumosztályokon (CS1689) érvényes. Nem érvényes más deklarációtípusokra, például nem attribútumosztályokra, szerkezetekre vagy interfészekre.
CallerArgumentExpression attribútum használata
A következő hibák akkor fordulnak elő, ha a CallerArgumentExpressionAttribute helytelenül van alkalmazva, vagy ütközik más hívóinformációs attribútumokkal.
- CS8959: A CallerArgumentExpressionAttribute nem alkalmazható, mert nincs szabványos átalakítás az 1. típusról a 2. típusra
- CS8960: A paraméterre alkalmazott CallerArgumentExpressionAttribute függvénynek nincs hatása. Ezt a CallerLineNumberAttribute felülbírálja.
- CS8961: A paraméterre alkalmazott CallerArgumentExpressionAttribute nem lesz hatással. Ezt felülbírálja a CallerFilePathAttribute.
- CS8962: A paraméterre alkalmazott CallerArgumentExpressionAttribute függvénynek nincs hatása. Ezt felülbírálja a CallerMemberNameAttribute.
- CS8963: A paraméterre alkalmazott CallerArgumentExpressionAttribute függvénynek nincs hatása. Érvénytelen paraméternévvel alkalmazza a rendszer.
A hibák kijavításához kövesse az alábbi szabályokat. További információ: Hívóinformációs attribútumok és CallerArgumentExpressionAttribute.
- A
CallerArgumentExpression-val díszített paraméternek típusastringkell legyen, vagy olyan típus kell legyen, amelyből szabványos konverzió létezikstring-ból/-ből, mert az attribútum a hívó argumentumkifejezésének egystringábrázolását adja meg (CS8959). Módosítsa a paraméter típusátstringtípusra, vagy kompatibilis típusra. - Az
CallerArgumentExpressionattribútumnak nincs hatása egy olyan paraméterre, amely szintén rendelkezik CallerLineNumberAttribute, CallerFilePathAttributevagy CallerMemberNameAttribute (CS8960, CS8961, CS8962). Ezek a hívóinformációs attribútumok elsőbbséget élveznek, ezért távolítsa el azCallerArgumentExpressionattribútumot a paraméterből. - A konstruktornak
CallerArgumentExpressionátadott sztringargumentumnak meg kell egyeznie egy másik paraméter nevével ugyanabban a metódus-aláírásban (CS8963). Ha a paraméter neve hibás, vagy nem létező paraméterre hivatkozik, az attribútumnak nincs hatása.