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ódiagnosztikát ismerteti:
- CS0193: A * vagy –> operátort mutatóra kell alkalmazni
- CS0196: Egy mutatót csak egy érték indexelhet
- CS0208: Nem lehet felvenni a címet, lekérni a méretet, vagy deklarálni egy mutatót egy felügyelt típusra ('type')
-
CS0209: Az utasításban
fixeddeklarált helyi típusnak mutatótípusnak kell lennie -
CS0210: Egy
fixedvagyusingutasítás deklarációjához inicializálót kell megadnia - CS0211: A megadott kifejezés címe nem vehető fel
-
CS0212: Csak egy nem rögzített kifejezés címét veheti fel egy
fixedutasítás-inicializálón belül -
CS0213: Az utasítás nem használható
fixedegy már rögzített kifejezés címének megvételére - CS0214: Mutatók és rögzített méretű pufferek csak nem biztonságos környezetben használhatók
-
CS0227: A nem biztonságos kód csak akkor jelenhet meg, ha a
/unsafebe van állítva fordításkor - CS0233: Az "azonosító" nem rendelkezik előre definiált mérettel, ezért a méret csak nem biztonságos környezetben használható
- CS0242: A kérdéses művelet nincs meghatározva üres mutatókon
-
CS0244: Sem "" sem "
isas" nem érvényes a mutatótípusokra - CS0254: Előfordulhat, hogy a rögzített utasítás-hozzárendelés jobb oldala nem egy leadott kifejezés
- CS0459: Nem lehet felvenni az írásvédett helyi változó címét
- CS0821: Implicit típusú helyi változók nem javíthatók
- CS1641: A rögzített méretű puffermezőnek a mező neve után a tömbméret-meghatározóval kell rendelkeznie
- CS1642: A rögzített méretű puffermezők csak a szerkezetek tagjai lehetnek
- CS1656: Nem rendelhet hozzá 'változóhoz', mert egy 'írásvédett változótípus'
-
CS1663: A rögzített méretű puffertípusnak a következők egyikének kell lennie:
bool,byte, ,short,int,longchar,sbyte,ushort,uint,ulongvagyfloatdouble - CS1664: A rögzített méretű puffer hossza "hossz" és "típus" túl nagy
- CS1665: A rögzített méretű puffereknek nullánál hosszabbnak kell lenniük
- CS1666: Nem rögzített méretű puffereket nem lehet használni a nem rögzített kifejezésekben. Próbálja meg használni a rögzített utasítást.
- CS1708: A rögzített méretű pufferek csak helyieken vagy mezőkön keresztül érhetők el
-
CS1716: Ne használjon ""
System.Runtime.CompilerServices.FixedBufferattribútumot. Használja helyette a "rögzített" mezőmódosítót. - CS1919: Nem biztonságos típusú "típusnév" nem használható az objektum létrehozásakor
-
CS4004: Nem lehet
awaitbiztonságos környezetben - CS7092: A rögzített pufferek csak egy dimenzióval rendelkezhetnek.
-
CS8372: Ne használjon "
System.Runtime.CompilerServices.FixedBuffer" attribútumot egy tulajdonságon - CS8385: A megadott kifejezés nem használható rögzített utasításban
- CS8500: Lekéri egy felügyelt típus ('type') címét vagy méretét, illetve felügyelt típusra mutató mutatót deklarál
- CS8812: A &metóduscsoport "metódus" nem függvény típusú mutatótípussá nem konvertálható.
- CS9049: A rögzített mező nem lehet ref mező.
-
CS9123: A "
&" operátor nem használható paramétereken vagy helyi változókon az aszinkron metódusokban. - CS9360: Ez a művelet csak nem biztonságos környezetben használható
-
CS9361:
stackallocinicializáló nélküliSkipLocalsInitkifejezés csak nem biztonságos környezetben használható -
CS9362: A "tag" nem biztonságos környezetben használható, mert ""
unsafejelöléssel rendelkezik - CS9363: A "tagot" nem biztonságos környezetben kell használni, mert mutatókkal rendelkezik az aláírásában
- CS9364: A nem biztonságos tag "member" nem írhatja felül a biztonságos "member"-t
- CS9365: Az „member” nem biztonságos tag nem valósíthatja meg impliciten a „member” biztonságos tagot.
- CS9366: A nem biztonságos tag "tag" nem valósíthat meg biztonságos tag "tag"
-
CS9367:
RequiresUnsafeAttributeerre a szimbólumra nem alkalmazható. -
CS9368:
RequiresUnsafeAttributecsak a frissített memóriabiztonsági szabályok érvényesek. -
CS9376: A(z) '
unsafe' jelölésű „konstruktor” konstruktorhoz nem biztonságos környezet szükséges, hogy megfeleljen a(z) „általános típus vagy metódus” elemben lévő „típusparaméter” típusparaméter 'new()' megkötésének -
CS9377: A "
unsafe" módosítónak nincs hatása a jelenlegi memóriabiztonsági szabályok szerint. -
CS9379: Ne használja a forrásban a ""
RequiresUnsafeAttributekifejezést, helyette használja a "unsafe" módosítót. -
CS9388: A(z) „
safe” módosító csak olyan „extern” tagokon használható, amelyek nincsenek „unsafe” jelöléssel ellátva. -
CS9389: A "
extern" tagot "" vagy "unsafesafe" jelöléssel kell ellátni. -
CS9390: Mindkét részleges tag-deklarációnak "
safe" jelöléssel kell rendelkeznie, vagy egyik sem lehet ""safejelöléssel -
CS9392: Az explicit vagy kiterjesztett elrendezésű mezőket "" vagy "
unsafesafe" jelöléssel kell ellátni. -
CS9396: A(z) "
unsafe" vagy "safe" módosító nem adható meg egyszerre a tulajdonságon vagy indexelőn és annak hozzáférőjén a(z) 'property' esetében. Távolítsa el az egyiket. -
CS9397: Nem adható meg ugyanaz a "
unsafe" vagy "safe" módosító a tulajdonság vagy indexelő tulajdonság összes tartozékán. Ehelyett helyezze ezt a módosítót magára a tulajdonságra. -
CS9398: Az „await” nem használható egy „
fixed” utasítás kontextusában
Mutatóműveletek és dereferálás
-
CS0193: Az
*vagy->az operátort egy mutatóra kell alkalmazni - CS0196: Egy mutatót csak egy érték indexelhet
- CS0242: A kérdéses művelet nincs meghatározva üres mutatókon
A mutatóműveletek helyes használatához kövesse a halasztási, indexelési és aritmetikai műveletekre vonatkozó szabályokat. További információ: Mutatótípusok és függvénymutatók.
- A
*vagy a->operátor csak adatmutatókra (CS0193) alkalmazható. Ne használja ezeket az operátorokat nem mutató típusokkal vagy függvénymutatókkal. Ellentétben a C/C++-szal, a C#-ban nem lehet dereferálni a függvénymutatókat. - Csak egy értékkel rendelkező indexmutatók (CS0196). A mutatók nem támogatják a többdimenziós indexelést.
- Kerülje az üres mutatókon (CS0242) definiálatlan műveleteket. Ne növelje például az üres mutatót, mert a fordító nem tudja a mutatott adatok méretét.
Mutatótípusok és kezelt típusok
- CS0208: Nem lehet lekérni a címét, meghatározni a méretét, vagy mutatót deklarálni egy felügyelt típusra ('type')
- CS0233: Az "azonosító" nem rendelkezik előre definiált mérettel, ezért a méret csak nem biztonságos környezetben használható
- CS8500: Ez egy felügyelt típus ('type') címét veszi, lekéri a méretét, vagy egy rá mutató mutatót deklarál
A mutatókkal és az sizeof operátorral való helyes munkához használjon nem felügyelt típusokat és megfelelő környezeteket. További információ: Nem felügyelt típusok és az sizeof operátor.
- Csak nem felügyelt típusok esetén használjon mutatót (CS0208). Ne vegyen címeket felügyelt típusoktól, ne határozza meg a méretüket, és ne deklaráljon mutatókat felügyelt típusokra. A felügyelt típusok hivatkozástípusokat és szerkezeteket tartalmaznak, amelyek referenciatípus-mezőket vagy tulajdonságokat tartalmaznak.
- Használja az
sizeofoperátort egyunsafekörnyezetben olyan típusok használatakor, amelyek mérete nem fordítási időállandó (CS0233). - Kerülje a felügyelt típus címének lekérését, méretének meghatározását, illetve a rá mutató mutató deklarálását (CS8500). Ez a figyelmeztetés (4. szint) akkor aktiválódik, amikor a fordító mutatóműveleteket észlel a felügyelt típusok esetében. A felügyelt típus bármilyen referenciatípus, vagy bármely olyan szerkezet, amely egy referenciatípust tartalmaz mezőként vagy tulajdonságként. További információ: Nem felügyelt típusok.
Rögzített utasításhasználat
- CS0209: A fixed utasításban deklarált helyi típusnak pointer típusúnak kell lennie
-
CS0210: Meg kell adnia egy inicializálót egy rögzített vagy
usingutasítás deklarációjában - CS0211: A megadott kifejezés címe nem vehető fel
- CS0212: A rögzített utasítás inicializálója csak egy nem rögzített kifejezés címét veheti fel
- CS0213: Nem használhatja a rögzített utasítást egy már rögzített kifejezés címének megvételéhez
- CS0254: Előfordulhat, hogy a rögzített utasítás-hozzárendelés jobb oldala nem egy leadott kifejezés
- CS0459: Nem kérhető le írásvédett helyi változó címe
- CS0821: Implicit típusú helyi változók nem javíthatók
- CS1656: Nem rendelhető érték a(z) „változóhoz”, mert ez egy „csak olvasható változótípus”.
- CS8385: A megadott kifejezés nem használható rögzített utasításban
Ezek a hibák akkor fordulnak elő, ha helytelenül használja az fixed utasítást . Az fixed utasítás megakadályozza, hogy a szemétgyűjtő áthelyezjen egy mozgatható változót, és egy mutatót deklaráljon ehhez a változóhoz. További információ: Nem biztonságos kód és mutatók.
Az utasítás helyes használata fixed :
- Deklarálja a változót mutatótípusként (CS0209).
- Adjon meg egy inicializálót az
fixedutasítás deklarációjában (CS0210). - Csak érvényes kifejezések címét vegye figyelembe: mezők, helyi változók és mutatók indirekt hivatkozásai (CS0211). Ne vegye figyelembe a számított kifejezések címét, például két változó összegét.
- Az címszám operátort csak az utasítás-inicializálón belüli, nemfixált kifejezéseken használja (
fixed). - Ne használjon utasítást
fixedmár rögzített kifejezéseken (CS0213). Aunsafemetódusok helyi változói és paraméterei már rögzítve vannak a veremben. - Ne használjon leadott kifejezéseket az utasítás-hozzárendelés (
fixed) jobb oldalán. - Ne használja az írásvédett helyi változók (CS0459) címét. A
foreachciklusokban,usingutasításokban ésfixedutasításokban található változók csak olvashatók. Ezt a hibát a fordító jelenlegi verziói már nem állítják elő. - Explicit típusokat használjon utasítások helyett
varfixed(CS0821). - Ne rendeljen hozzá változókat írásvédett környezetekben, például
foreachhurkokban vagyusingésfixedutasításokban (CS1656). - Csak a(z)
fixedutasításban rögzítésre alkalmas kifejezéseket használjon (CS8385). A kifejezésnek címezhető változónak, sztringnek vagy megfelelőGetPinnableReferencemetódust megvalósító típusnak kell lennie.
Nem biztonságos környezeti követelmények
- CS0214: Mutatók és rögzített méretű pufferek csak nem biztonságos környezetben használhatók
- CS0227: Nem biztonságos kód csak akkor jelenhet meg, ha a /unsafe parancsot használja
-
CS0244: Sem "" sem "
isas" nem érvényes a mutatótípusokra - CS1919: Nem biztonságos típusú "típusnév" nem használható az objektum létrehozásakor
-
CS4004: Nem lehet
awaitbiztonságos környezetben -
CS9123: A "
&" operátor nem használható paramétereken vagy helyi változókon az aszinkron metódusokban - CS9360: Ez a művelet csak nem biztonságos környezetben használható
-
CS9361:
stackallocinicializáló nélküliSkipLocalsInitkifejezés csak nem biztonságos környezetben használható -
CS9362: A(z) 'member' elemet unsafe kontextusban kell használni, mert '
unsafe' jelöléssel van ellátva - CS9363: A "tagot" nem biztonságos környezetben kell használni, mert mutatókkal rendelkezik az aláírásában
-
CS9376: A(z) '
new()' megszorítás teljesítéséhez a(z) 'generikus típus vagy metódus' elemben lévő 'típusparaméter' esetén nem biztonságos környezet szükséges a(z) 'unsafe' jelöléssel ellátott 'constructor' konstruktorhoz -
CS9398: Az „await” nem használható „
fixed” utasításkörnyezetben
Ezek a diagnosztika akkor fordul elő, ha nem biztonságos kódszerkezeteket használ a szükséges unsafe környezet nélkül, vagy olyan műveleteket kísérel meg, amelyek nem engedélyezettek a nem biztonságos típusokkal. További információ: Nem biztonságos kód és mutatók , valamint a unsafe kulcsszó.
- Jelölje meg azokat a metódusokat, típusokat vagy kódblokkokat, amelyek mutatókat vagy rögzített méretű puffereket használnak a
unsafekulcsszóval (CS0214). A fordító explicit nem biztonságos környezetet igényel minden olyan kódhoz, amely mutatótípusokkal vagy rögzített méretű puffermezőkkel működik. - Engedélyezze az AllowUnsafeBlocks fordítóbeállítást a projektbeállításokban (CS0227). E lehetőség nélkül a fordító elutasítja az összes
unsafeblokkot, még akkor is, ha a kód egyébként helyes. - Ne használja a
isvagyasoperátorokat mutatótípusokkal (CS0244). Ezek a típustesztelő operátorok nem érvényesek a mutatókra, mert a mutatók nem vesznek részt a típushierarchiában. - Ne használja az operátort
newmutatótípus-példányok (CS1919) létrehozásához. Ha nem felügyelt memóriában szeretne objektumokat létrehozni, az interop használatával hívhatja meg a mutatókat visszamutató natív metódusokat. - A CS4004-et tekintse elavult iránymutatásnak. A C# 14-es és korábbi verzióiban a
awaithasználata nem engedélyezett nem biztonságos környezetben. A C# 15 előzetes verzió memóriabiztonsági változásaiawaitnem biztonságos környezetben engedélyezettek, így ez a keretkorlátozás már nem írja le az aktuális szabályt. - Ne használja az operátor (
&) címét paramétereken vagy helyi változókon az aszinkron metódusokban (CS9123). Előfordulhat, hogy a változó nem létezik a veremben, amikor az aszinkron művelet a felfüggesztési pont után folytatódik. - Jelölje meg a nem biztonságos szerkezeteket (például a mutató elhalasztását, a címzést vagy
sizeofa nem felügyelt típusokat) tartalmazó műveleteket aunsafekulcsszóval (CS9360). A C# 15 frissített memóriabiztonsági szabályai szerint a fordító azonosítja azokat az egyéni műveleteket, amelyek nem biztonságos környezetet igényelnek. - Használja a
unsafekulcsszót azstackallocinicializálók nélküli kifejezésekhez, amikor azSkipLocalsInitattribútumot alkalmazzák (CS9361). Inicializáló nélkül a verem által lefoglalt memória nem inicializált adatokat tartalmaz, ami nem biztonságos művelet. - Használjon kontextust
unsafea megjelöltunsafetagok (CS9362) vagy az aláírásukban mutatókkal rendelkező tagok (CS9363) meghívásakor. A frissített memóriabiztonsági modellben a fordító a CS9362 hibát jelzi azoknál a tagoknál, amelyek kifejezetten a hívóra hárítják át a biztonsági kötelezettséget, és a CS9363 hibát a visszamenőleges kompatibilitási esetekben, amikor maga a szignatúra pointereket tartalmaz. - Használjon
unsafekörnyezetet, ha egynew()megkötés egyunsafejelöléssel ellátott konstruktor meghívását követeli meg (CS9376). Az általános példányosítás implicit módon hívja meg a konstruktort, ezért a hívó környezetnek nem biztonságosnak kell lennie. - Helyezze át
awaita(z)fixedutasítás törzsén vagy inicializálóján kívülre (CS9398). A C# 15 előzetes verziója lehetővé teszi a(z)awaithasználatát nem biztonságos környezetben, de a(z)fixedutasítás rögzítésének élettartama továbbra sem nyúlhat át egy aszinkron felfüggesztési ponton. Várja meg a műveletet a beírásfixedelőtt, vagy lépjen ki azfixedutasításból a várakozás előtt.
Nem biztonságos tagokra vonatkozó biztonsági szerződések
- CS9364: A "nem biztonságos" tag nem bírálhatja felül a "biztonságos" tagot
- CS9365: Nem biztonságos tag "tag" nem valósíthat meg implicit módon biztonságos tag "tag"
- CS9366: A nem biztonságos "tag" nem valósíthat meg biztonságos "tag"-ot
-
CS9367:
RequiresUnsafeAttributeerre a szimbólumra nem alkalmazható. -
CS9368:
RequiresUnsafeAttributecsak a frissített memóriabiztonsági szabályok érvényesek. -
CS9377: A "
unsafe" módosítónak nincs hatása a jelenlegi memóriabiztonsági szabályok szerint. -
CS9379: Ne használja a forrásban a ""
RequiresUnsafeAttributekifejezést, helyette használja a "unsafe" módosítót. -
CS9388: A(z) "
safe" módosító csak olyan "extern" tagokon használható, amelyek nincsenek "unsafe" jelöléssel megjelölve. -
CS9389: A "
extern" tagot "" vagy "unsafesafe" jelöléssel kell ellátni. -
CS9390: Mindkét részleges tagdeklarációt "
safe" jelöléssel kell ellátni, vagy egyiket sem szabad "safe" jelöléssel ellátni -
CS9396: A(z) "
unsafe" vagy "safe" módosító nem adható meg egyszerre a(z) „property” tulajdonságon vagy indexelőn és annak elérőjén. Távolítsa el az egyiket. -
CS9397: Nem adható meg ugyanaz a "
unsafe" vagy "safe" módosító a tulajdonság vagy indexelő tulajdonság összes tartozékán. Ehelyett helyezze ezt a módosítót magára a tulajdonságra.
Ezek a diagnosztikák kikényszerítik a C# 15 biztonsági szerződés szabályait a nem biztonságosként megjelölt tagokra. A fordító biztosítja, hogy a nem biztonságos tagok ne sértse meg az alaposztályok és interfészek által támasztott biztonsági elvárásokat. További információ: Nem biztonságos kód és mutatók , valamint a unsafe kulcsszó.
- Ne bíráljon felül egy biztonságos alaptagot egy nem biztonságos taggal (CS9364). A felülbírálásnak meg kell őriznie az alaptag biztonsági szerződését. Ha az alaptag biztonságos, a felülbírálásnak is biztonságosnak kell lennie. Távolítsa el a
unsafemódosítót vagyRequiresUnsafeAttributea felülíró tagot, vagy jelölje meg az alaptagot nem biztonságosként. - Ne implementáljon implicit módon biztonságos illesztőtagot nem biztonságos taggal (CS9365). Amikor egy típus implicit módon implementál egy illesztőtagot, a hívók az interfészen keresztül biztonságos műveletet várnak. Távolítsa el a nem biztonságos megjelölést a implementáló tagtól, vagy használjon explicit felületi implementációt.
- Ne implementáljon explicit módon biztonságos illesztőtagot nem biztonságos taggal (CS9366). A felülettag biztonsági szerződését még explicit megvalósítás esetén is meg kell őrizni.
- Csak a támogatott szimbólumtípusokra (
RequiresUnsafeAttribute) alkalmazható. Ez az attribútum alkalmazható metódusokra, tulajdonságokra, eseményekre, konstruktorokra és típusokra, de nem minden szimbólumtípus támogatja azt. - Engedélyezze a frissített memóriabiztonsági szabályokat
RequiresUnsafeAttribute(CS9368). Ez az attribútum a C# 15 kifinomult memóriabiztonsági modelljének része, és a régebbi szabályok szerint nem ismerik el. Győződjön meg arról, hogy a projekt olyan nyelvi verziót céloz meg, amely támogatja a frissített szabályokat. - Távolítsa el a
unsafemódosítót, ha nincs hatása (CS9377). A jelenlegi memóriabiztonsági szabályok szerint bizonyos környezetek nem igénylik vagy nem élvezik aunsafemódosító előnyeit. A fordító figyelmezteti, ha a módosító értelmetlen, így törölheti a szükségtelen széljegyzeteket. - Használja a
unsafemódosítót közvetlenül a tag deklarációján, ahelyett hogy a forráskódban aRequiresUnsafeAttributeelemet alkalmazná (CS9379). Az attribútum csak metaadat-megjelenítésre szolgál; a forráskódban aunsafekulcsszó a megfelelő mechanizmus. - Az
safemódosítót csak olyanexterntagokra alkalmazza, amelyek még nincsenekunsafemegjelölve (CS9388). Asafemódosító kifejezetten az extern tagot választja az extern deklarációk alapértelmezett nem biztonságos feltételezéséből. - Jelöljön meg minden
externtagotunsafevagysafeértékkel (CS9389). A frissített memóriabiztonsági szabályok értelmében az extern tagoknak explicit módon deklarálniuk kell a biztonsági szerződésüket, mert a fordító nem tudja ellenőrizni a megvalósítást. - Győződjön meg arról, hogy mindkét részleges tagnyilatkozat egyetért a
safemódosítóval (CS9390). Ha az egyik részleges nyilatkozat meg van jelölvesafe, a másikat is meg kell jelölnisafeegy egységes biztonsági szerződés fenntartásához. - Helyezze a(z)
safevagyunsafeelemet vagy a tulajdonságra, vagy az indexelőre, illetve egy elérőre, de ne mindkettőre (CS9396). Ha a tulajdonság az összes elérő szerződését meghatározza, helyezze a módosítót magára a tulajdonságra. Ha csak egy tartozék különbözik, helyezze a módosító elemet a tartozékra, és hagyja a tulajdonságot változatlanul. - Ha egy tulajdonság vagy indexelő minden tartozéka ugyanazzal
unsafevagysafemódosítóval rendelkezne, helyezze át a módosítót a tulajdonság vagy indexelő deklarációjára (CS9397). A tartozékmódosítókat csak akkor használja, ha a tartozékok szándékosan eltérnek egymástól.
Explicit vagy bővített elrendezésű mezők
-
CS9392: Az explicit vagy kiterjesztett elrendezésű mezőket "" vagy "
unsafesafe" jelöléssel kell ellátni.
Ez a diagnosztikai jelzés a frissített memóriabiztonsági modellben akkor fordul elő, amikor egy példánymező explicit vagy kiterjesztett elrendezés része, és a deklaráció nem adja meg, hogy a mező unsafe vagy safe. További információ: Nem biztonságos kód és mutatók , valamint a safe kulcsszó.
- Jelölje meg egy típus minden példánymezőjét vagy
[StructLayout(LayoutKind.Explicit)]értékkel úgy, hogy[ExtendedLayout]vagyunsafelegyen (safe). Ha a mező szintetizálva van egy automatikus tulajdonsághoz, mezőalapú tulajdonsághoz, elsődleges konstruktorparaméterhez vagy mezőhöz hasonló eseményhez, helyezze a módosítót arra a tulajdonságra, paraméterre vagy eseményre, amely a létrehozott mezőt birtokolja.
Rögzített méretű pufferek
- CS1641: A rögzített méretű puffermezőnek a mező neve után a tömbméret-meghatározóval kell rendelkeznie
- CS1642: A rögzített méretű puffermezők csak a szerkezetek tagjai lehetnek
-
CS1663: A rögzített méretű puffertípusnak a következők egyikének kell lennie:
bool,byte, ,short,int,longchar,sbyte,ushort,uint,ulongvagyfloatdouble - CS1664: A rögzített méretű puffer hossza "hossz" és "típus" túl nagy
- CS1665: A rögzített méretű puffereknek nullánál hosszabbnak kell lenniük
- CS1666: Nem rögzített méretű puffereket nem lehet használni a nem rögzített kifejezésekben. Próbálja meg használni a rögzített utasítást.
- CS1708: A rögzített méretű pufferek csak helyieken vagy mezőkön keresztül érhetők el
-
CS1716: Ne használjon ""
System.Runtime.CompilerServices.FixedBufferattribútumot. Használja helyette a "rögzített" mezőmódosítót. - CS7092: A rögzített pufferek csak egy dimenzióval rendelkezhetnek.
-
CS8372: Ne használjon "
System.Runtime.CompilerServices.FixedBuffer" attribútumot egy tulajdonságon - CS9049: Egy rögzített mező nem lehet ref mező.
Ezek a hibák rögzített méretű pufferek használatakor fordulnak elő. A rögzített méretű pufferek olyan tömbök, amelyek közvetlenül a szerkezetekbe vannak ágyazva, és elsősorban interop forgatókönyvekhez használatosak. További információ: Rögzített méretű pufferek.
Rögzített méretű pufferek helyes deklarálása és használata:
- Adja meg a tömbméretet a mező neve után egy pozitív egész számállandóval (CS1641, CS1665). A puffer teljes mérete (az elemszám és az elemméret szorzata) nem haladhatja meg a 2^31 bájtot (CS1664).
- Rögzített méretű puffereket csak a szerkezetekben deklarálhat, az osztályokban (CS1642) nem. Használjon normál tömböt, ha egy osztályban szüksége van a mezőre.
- Használja az egyik támogatott elemtípust:
bool, ,byte,short,intlong,char,sbyte,ushort,uint, ,ulongfloatvagydouble(CS1663). - Használjon egy
fixedutasítást a tárolószerkezet rögzítéséhez a puffer (CS1666) elérése előtt. - Rögzített méretű puffereket csak helyieken vagy mezőkön keresztül érhet el, köztes kifejezéseken (CS1708) keresztül nem.
- Az attribútum helyett használja a
fixedSystem.Runtime.CompilerServices.FixedBuffermezőmoderálót (CS1716). Ezt az attribútumot ne alkalmazza a tulajdonságokra (CS8372). - Rögzített pufferek deklarálása csak egy dimenzióval (CS7092). A többdimenziós rögzített pufferek nem támogatottak.
- Ne deklarálja a rögzített méretű puffereket mezőkként
ref(CS9049). A rögzített méretű puffereknek értékmezőknek kell lenniük.
Függvénymutatók
- CS8812: A &metóduscsoport "metódus" nem függvény típusú mutatótípussá nem konvertálható.
Függvénymutató lekéréséhez használja az operátor címét egy explicit függvénymutató-típus leadással. Az operátor &címével ne rendeljen metóduscsoportokat void* vagy más nem függvénymutató-típusokat. További információ: Függvénymutatók.