Megosztás a következőn keresztül:


Hivatkozási paraméterekkel, változókkal és visszatérésekkel kapcsolatos hibák és figyelmeztetések

A referenciaváltozók használatakor a következő hibák hozhatók létre:

  • CS0192: A readonly mező nem használható értékként ref vagy out értékként (a konstruktor kivételével)
  • CS0199: Egy static readonly mező nem használható értékként vagy ref értékként out (statikus konstruktor kivételével)
  • CS0206: Nem ref-returning tulajdonság vagy indexelő nem használható értékként vagy out értékként ref
  • CS0631: ref és out nem érvényes ebben a környezetben
  • CS0767: A megadott típusparaméterekkel nem örökölhető a felület, mert a metódus túlterheléseket okoz, amelyek csak a refout
  • CS1510: A ref vagy out értéknek hozzárendelhető változónak kell lennie
  • CS1605: A változó nem használható értékként vagy ref értékkéntout, mert írásvédett
  • CS1623: Az iterátorok nem rendelkezhetők refparaméterekkel in vagy out paraméterekkel
  • CS1649: Egy readonly mező tagjai nem használhatók értékként ref vagy out értékként (a konstruktor kivételével)
  • CS1651: Statikus írásvédett mező mezői nem használhatók értékként vagy ref értékként out (a statikus konstruktor kivételével)
  • CS1655: A típusmezők nem használhatók értékként vagy ref értékként out
  • CS1657: A változó nem használható értékként vagy ref értékként out
  • CS1741: Egy ref vagy out több paraméter nem rendelkezhet alapértelmezett értékkel
  • CS1939: A tartományváltozó nem adható át paraméterként vagy out paraméterként ref
  • CS1988: Az aszinkron metódusok nem rendelkeznek refparaméterekkel in vagy out paraméterekkel
  • CS7084: Előfordulhat, hogy egy Windows-futtatókörnyezet esemény nem adható át paraméterként vagy out paraméterkéntref.
  • CS8196: Az implicit módon beírt kimenő változóra való hivatkozás nem engedélyezett ugyanabban az argumentumlistában.
  • CS8325: "await" nem használható feltételes operátort ref tartalmazó kifejezésben
  • CS8326: Mindkét feltételes operátor értékének ref értéknek kell lennie, vagy egyik sem lehet hiv-érték
  • CS8327: A kifejezésnek megfelelő típusúnak kell lennie, hogy megfeleljen az alternatív hiv-értéknek
  • CS8329: A változó nem használható értékként vagy ref értékkéntout, mert írásvédett változó
  • CS8330: A változó tagjai nem használhatók értékként vagy ref értékkéntout, mert az egy olvasható változó
  • CS8331: Nem rendelhető hozzá a változóhoz, és nem használható a hozzárendelés jobb oldalán ref , mert az egy könnyen olvasható változó
  • CS8332: Nem rendelhető hozzá egy változó taghoz, és nem használható a hozzárendelés jobb oldalán ref , mert az egy olvasható változó
  • CS8337: A "ref" bővítménymetódus első paraméterének egy értéktípusnak vagy általános típusnak kell lennie, amely a strukturáláshoz van korlátozva.
  • CS8338: A bővítménymetódus első "in" vagy ""ref readonly paraméterének konkrét (nem általános) értéktípusnak kell lennie.
  • CS8373: A hozzárendelés bal oldalán ref ref változónak kell lennie.
  • CS8388: Egy out változó nem deklarálható hiv helyiként
  • CS8977: Nem használható "ref", ""in vagy ""out a "UnmanagedCallersOnly" attribútumú metódus aláírásában.
  • CS8986: A paraméter "hatókörön belüli" módosítója nem egyezik a célval.
  • CS8987: A paraméter "hatókörön belüli" módosítója nem egyezik a felülírt vagy a implementált tagval.
  • CS9061: A "scoped" módosító nem használható elvetéssel.
  • CS9062: A típusok és aliasok nem nevezhetők "hatókörnek".
  • CS9063: A UnscopedRefAttribute nem alkalmazható erre a paraméterre, mert alapértelmezés szerint nincs megadva.
  • CS9065: Ne használja a "System.Runtime.CompilerServices.ScopedRefAttribute" parancsot. Használja inkább a "hatókörön" kulcsszót.
  • CS9066: A UnscopedRefAttribute nem alkalmazható a "hatókörrel rendelkező" módosítókkal rendelkező paraméterekre.
  • CS9072: A dekonstruálási változó nem deklarálható ref helyiként
  • CS9101: A UnscopedRefAttribute csak a szerkezet- vagy virtuálisfelület-példányok metódusaira és tulajdonságaira alkalmazható, és konstruktorokra vagy csak init-only tagokra nem alkalmazható.
  • CS9102: A UnscopedRefAttribute nem alkalmazható felületi implementációra, mert a implementált tag nem rendelkezik ezzel az attribútummal.
  • CS9104: Nem using használható aszinkron metódusokban vagy aszinkron lambdakifejezésekben egy típusú utasításerőforrás.
  • CS9190: readonly a módosító megadása után refkell megadni.
  • CS9199: Egy ref readonly paraméter nem rendelkezhet Out attribútummal.

A referenciaváltozók helytelen használata esetén a következő figyelmeztetések jönnek létre:

  • CS9073: A paraméter "hatókörön belüli" módosítója nem egyezik a célval.
  • CS9074: A paraméter "hatókörön belüli" módosítója nem egyezik a felülírt vagy a implementált tagval.
  • CS9191: A ref paraméternek megfelelő in argumentum módosító értéke megegyezik a in. Fontolja meg a használatát in .
  • CS9192: Az argumentumot meg kell adni a kulcsszóval vagy ref a kulcsszóval in együtt.
  • CS9193: Az argumentumnak változónak kell lennie, mert egy paraméternek ref readonly továbbítja
  • CS9195: Az argumentumot a in kulcsszóval együtt kell átadni
  • CS9196: A paraméter referenciatípus-módosítója nem egyezik meg a felülírt vagy a implementált tag megfelelő paraméterével.
  • CS9197: A paraméter referenciatípus-módosítója nem egyezik a rejtett tag megfelelő paraméterével.
  • CS9198: A paraméter referenciatípus-módosítója nem felel meg a célnak megfelelő paraméternek.
  • CS9200: A paraméterhez ref readonly alapértelmezett érték van megadva, de ref readonly csak hivatkozásokhoz használható. Fontolja meg a paraméter indeklarálását .
  • CS9201: A ref mezőt használat előtt újra kell rendelni.
  • CS9265: A mező soha nem lesz újra hozzárendelve, és mindig az alapértelmezett értékével (nullhivatkozás) fog rendelkezni.

Ezek a hibák és figyelmeztetések a következő témákat követik:

Ez a cikk a kifejezés referenciaváltozóját használja általános kifejezésként egy , , in, ref readonlyvagy ref módosítóval deklarált outparaméterhez, vagy egy ref helyi változóhoz, egy ref mezőhöz ref structegy , vagy egy ref visszatéréshez. A referenciaváltozó egy másik változóra, az úgynevezett hivatkozási változóra hivatkozik.

Helytelen szintaxis

Ezek a hibák azt jelzik, hogy helytelen szintaxist használ a referenciaváltozókkal kapcsolatban:

  • CS8373: A hozzárendelés bal oldalán ref ref változónak kell lennie.
  • CS8388: Egy out változó nem deklarálható hiv helyiként.
  • CS9190: readonly a módosító megadása után refkell megadni.

A hibák kijavítása:

  • Győződjön meg arról, hogy a = ref operátor bal oldali operandusa referenciaváltozó legyen, ne pedig értékkifejezés vagy nem referencia alapú helyi változó. A ref-hozzárendeléshez mindkét oldalnak referenciaváltozóknak kell lenniük, amelyek létrehozhatnak egy aliast ugyanarra a tárolóhelyre (CS8373).
  • Amikor referenciaparamétereket deklarál, a módosítót így írja: ref readonly ahelyett, hogy readonly ref. A C#-nyelv specifikációja megköveteli, hogy a ref kulcsszó megelőzze a readonly módosító paraméterdeklarációkban, hogy konzisztens szintaxist tartson fenn az összes referenciaparaméter-típusban (CS9190).
  • Használja a kulcsszót ref a out helyi referenciaváltozók deklarálása helyett. out kizárólag olyan paramétermódosító, amely azt jelzi, hogy a metódusnak a visszatérés előtt hozzá kell rendelnie egy értéket, míg ref a helyi változók más tárolási helyeken (CS8388) való létrehozásához megfelelő kulcsszó. A referenciaváltozókkal és azok szintaxisi követelményeivel kapcsolatos további információkért tekintse meg a referenciaváltozókat és a C# nyelvi specifikációját.

Referenciaváltozó-korlátozások

Az alábbi hibák azt jelzik, hogy egy referenciaváltozó nem használható ott, ahol van:

  • CS0631: ref és out nem érvényes ebben a környezetben
  • CS0767: A megadott típusparaméterekkel nem örökölhető a felület, mert a metódus túlterheléseket okoz, amelyek csak a refout
  • CS1623: Az iterátorok nem rendelkezhetők refparaméterekkel in vagy out paraméterekkel
  • CS1741: Egy ref vagy out több paraméter nem rendelkezhet alapértelmezett értékkel
  • CS1939: A tartományváltozó nem adható át paraméterként vagy out paraméterként ref
  • CS1988: Az aszinkron metódusok nem rendelkeznek refparaméterekkel in vagy out paraméterekkel
  • CS7084: Előfordulhat, hogy egy Windows-futtatókörnyezet esemény nem adható át paraméterként vagy out paraméterkéntref.
  • CS8196: Az implicit típusú out változóra való hivatkozás nem engedélyezett ugyanabban az argumentumlistában.
  • CS8325: A "await" nem használható feltételes operátort ref tartalmazó kifejezésben
  • CS8326: Mindkét feltételes operátor értékének ref értéknek kell lennie, vagy egyik sem lehet hiv-érték
  • CS8327: A kifejezésnek megfelelő típusúnak kell lennie, hogy megfeleljen az alternatív hiv-értéknek
  • CS8337: A "ref" bővítménymetódus első paraméterének egy értéktípusnak vagy általános típusnak kell lennie, amely a strukturáláshoz van korlátozva.
  • CS8338: A bővítménymetódus első "in" vagy ""ref readonly paraméterének konkrét (nem általános) értéktípusnak kell lennie.
  • CS8977: Nem használható "ref", ""in vagy ""out a "UnmanagedCallersOnly" attribútumú metódus aláírásában.
  • CS9072: A dekonstruálási változó nem deklarálható ref helyiként
  • CS9104: Nem using használható aszinkron metódusokban vagy aszinkron lambdakifejezésekben egy típusú utasításerőforrás.
  • CS9199: Egy ref readonly paraméter nem rendelkezhet Out attribútummal.

Az alábbi figyelmeztetések azt jelzik, hogy nem szabad referenciaváltozót használni, és lehet, hogy nem biztonságos:

  • CS9196: A paraméter referenciatípus-módosítója nem egyezik meg a felülírt vagy a implementált tag megfelelő paraméterével.
  • CS9197: A paraméter referenciatípus-módosítója nem egyezik a rejtett tag megfelelő paraméterével.
  • CS9198: A paraméter referenciatípus-módosítója nem felel meg a célnak megfelelő paraméternek.
  • CS9200: A paraméterhez ref readonly alapértelmezett érték van megadva, de ref readonly csak hivatkozásokhoz használható. Fontolja meg a paraméter indeklarálását .
  • CS9201: A ref mezőt használat előtt újra kell rendelni.
  • CS9265: A mező soha nem lesz újra hozzárendelve, és mindig az alapértelmezett értékével (nullhivatkozás) fog rendelkezni.

A hibák kijavítása:

  • Referenciaparaméterek eltávolítása az indexelőkből. Az indexelők tömbszerű hozzáférési szintaxist biztosítanak, és a fordító nem garantálja az indexelő tartozékain (CS0631, CS1623) keresztül továbbított hivatkozások biztonságos élettartam-nyomon követését.
  • Távolítsa el a referenciaparamétereket az iterátor metódusaiból. Az iterátorok lazán hajtják végre a kódot több híváson az állapotgépek használatával, és a fordító nem tudja biztosítani, hogy a hivatkozott változók érvényesek maradjanak a hozamvisszatérítési határok között, ahol a végrehajtás fel van függesztve és folytatva (CS1623).
  • Távolítsa el a referenciaparamétereket az aszinkron metódusokból. Az aszinkron metódusok felfüggeszthetik a végrehajtást a várakozási pontokon, és folytathatják a különböző szálakon, így lehetetlenné válik annak garantálása, hogy a hivatkozott változók érvényesek és elérhetők maradjanak a metódus végrehajtása során (CS1988).
  • Ne használjon várakozási kifejezéseketa ref feltételes kifejezésekben. A várakozási művelet felfüggesztheti a végrehajtást, és érvénytelenítheti a feltételes operátor által kiválasztott hivatkozásokat, ami érvénytelenített hivatkozásokat eredményezhet a végrehajtás folytatásakor (CS8325).
  • Győződjön meg arról, hogy a ref feltételes operátor mindkét ága hivatkozásokat ad vissza, vagy egyik sem ad vissza hivatkozást, és ha mindkettő hivatkozás, akkor azoknak azonos típusúnak kell lenniük. A feltételes operátornak konzisztens eredménytípust kell létrehoznia, amelyet a hívó kód biztonságosan használhat, függetlenül attól, hogy melyik ág van kiválasztva (CS8326, CS8327).
  • Távolítsa el az alapértelmezett értékeket a ref és a out paraméterekről. A referenciaparamétereket mindig meg kell adni a hívási helyen a paraméter és egy meglévő változó közötti szükséges alias-kapcsolat létrehozásához, így az alapértelmezett értékek szemantikailag értelmetlenek (CS1741).
  • Ne deklaráljon implicit módon beírt változót out egy olyan argumentumlistában, amely szintén ugyanarra a változóra hivatkozik. A fordítónak ki kell következtetnie a változó típusát a metódus-aláírásból, miközben egyidejűleg érvényesíti a változó használatát ugyanabban a kifejezésben, és körkörös függőséget (CS8196) hoz létre.
  • Ne adja át a LINQ lekérdezéstartomány változóit referenciaparaméterként. A tartományváltozók olyan fordító által létrehozott iterációs változók, amelyek élettartamát a lekérdezés-végrehajtási modell felügyeli, és nem rendelkeznek stabil memóriahelyekkel, amelyek biztonságosan hivatkozhatók (CS1939).
  • Használjon normál értékváltozókat ahelyett, hogy ref helyi változókat használna az objektumok dekonstruálásakor. A dekonstruálás új változókat hoz létre a dekonstruált értékek fogadásához, és a referenciaváltozók megpróbálják aliasként használni ezeket az ideiglenes értékeket ahelyett, hogy egymástól függetlenül tárolnák őket (CS9072).
  • Kerülje több olyan felület implementálását, ahol a metódusok csak a paraméterek módosítóitól refout eltérőek. A C#-nyelv specifikációja ezeket különálló aláírásként kezeli, de nem teszi lehetővé annak egyértelműsítését, hogy melyik implementációt hívja meg mindkettő ref , és out ugyanazt a hívásszintaxist használja a megvalósítási határokon (CS0767).
  • Távolítsa el a referenciaparamétereket az System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute-vel dekorált metódusokból. Ezek a metódusok nem felügyelt kódból hívhatók, amelyek nem ismerik a C#referenciabiztonsági szabályait, és nem garantálják a hivatkozott változók megfelelő élettartam-kezelését a felügyelt/nem felügyelt határokon (CS8977).
  • A ref módosítót csak értéktípusokhoz vagy olyan általános típusokhoz használja, amelyek értéktípusokra vannak korlátozva, a bővítmény metódus első paraméterénél. A referenciatípusok a CLR szintjén már referenciaként vannak átadva, és a ref hozzáadása referenciára hivatkozást hozna létre, míg a ref engedélyezésével rendelkező értéktípus-bővítmények lehetővé teszik a kiterjesztett példány módosítását (CS8337, CS8338).
  • Ne adjon át windowsos futtatókörnyezeti eseményeket referenciaparaméterként. Ezek az események a Windows futtatókörnyezet típusú rendszert követik, amely a .NET-hivatkozásoktól eltérő élettartamú és szálbefűző szemantikával rendelkezik, és nem támogatja a C# referenciaparaméterek (CS7084) által megkövetelt aliasálási viselkedést.
  • Távolítsa el a System.Runtime.InteropServices.OutAttribute-t a ref readonly paraméterekből. Ez az attribútum a szemantikák platformhívási forgatókönyvekben való tárolására szolgál, ahol a paraméter iránya csak kimenő, ami ütközik azzal a garanciával ref readonly, hogy a paraméter a meglévő adatokra hivatkozik, amelyek nem lesznek újra hozzárendelve (CS9199).
  • Konstruktor befejezése előtt győződjön meg arról, hogy egy típus összes ref mezője vagy mező-inicializálókban, vagy a konstruktor minden kódútvonalán hozzá van rendelve. A nem inicializált ref mezők érvénytelen hivatkozásokat tartalmazhatnak, amelyek hozzáférés esetén memóriasérüléshez vezethetnek (CS9201, CS9265).
  • A referenciatípus-módosítók (ref, in, out, ref readonly) egyezzenek meg egy metódus és annak felülírt alapmetódusa vagy az implementált interfészmetódus között. A referencia-módosító annak a metódus-aláírási szerződésnek a része, amely szerint a származtatott típusoknak tiszteletben kell tartaniuk a helyettesíthetőséget és a hívókkal kapcsolatos elvárásokat (CS9196, CS9197, CS9198).
  • Deklarálja a paramétereket in az alapértelmezett értékek megadása helyett ref readonly . ref readonly olyan helyzetekhez készült, ahol a hívó egy meglévő változóra mutató hivatkozást ad át, míg in a paraméterek a hivatkozásokat és az értékek ideiglenes másolatait is elfogadhatják, így az alapértelmezett értékek értelmezhetők (CS9200).

A referenciaváltozók megengedett helyzetéről további információt a metódusparaméterek, az iterátorok, az aszinkron programozási minták és a C# nyelvi specifikációja című témakörben talál.

unscoped ref Korlátozások

A unscoped paraméterek minősítője ref egyes helyeken nem engedélyezett:

  • CS9101: A UnscopedRefAttribute csak strukturált példányra vagy virtuális felületi metódusokra és tulajdonságokra alkalmazható, és nem alkalmazható konstruktorokra vagy csak init-only tagokra.
  • CS9102: A UnscopedRefAttribute nem alkalmazható felületi implementációra, mert a implementált tag nem rendelkezik ezzel az attribútummal.

A hibák kijavítása:

  • Távolítsa el a unscoped módosítót vagy az attribútumot a System.Diagnostics.CodeAnalysis.UnscopedRefAttribute szerkezetkonstruktorokból és a csak init-only tagokból. Ezek a tagok speciális inicializálási szemantikával rendelkeznek, ahol a fordítónak gondoskodnia kell arról, hogy a hivatkozások ne lépik túl az inicializálási fázist, és a nem célzott hivatkozások engedélyezése megsértené azt a garanciát, hogy az inicializálás befejeződik, mielőtt a szerkezet teljesen elérhetővé válik (CS9101).
  • Távolítsa el a módosítót az unscoped illesztő implementálási módszereiből, ha a megfelelő illesztőmetódus nem rendelkezik vele. A nem meghatározott jellemző hatással van a metódus szerződésére a referencia-élettartam garanciái tekintetében, és a implementációknak ugyanazt a szerződést kell fenntartaniuk, mint az általuk implementált felületnek, hogy a hívók konzisztens élettartam-viselkedésre támaszkodhassanak, függetlenül attól, hogy melyik implementációt hívják meg (CS9102).

A hatókörrel és a hatókör nélküli hivatkozásokkal kapcsolatos további információkért tekintse meg a metódusparamétereket és az alacsony szintű strukturálási fejlesztések funkcióspecifikációját.

A referenciaváltozókhoz hivatkozni kell

Egy változót argumentumként kell megadnia egy referenciaparaméterhez, hivatkozási visszatéréshez vagy helyi hozzárendelés újbóli hozzárendeléséhez:

  • CS0206: Nem ref-returning tulajdonság vagy indexelő nem használható értékként vagy out értékként ref
  • CS1510: A ref vagy out értéknek hozzárendelhető változónak kell lennie

Figyelmeztetések:

  • CS9191: A ref paraméternek megfelelő in argumentum módosító értéke megegyezik a in. Fontolja meg a használatát in .
  • CS9192: Az argumentumot meg kell adni a kulcsszóval vagy ref a kulcsszóval in együtt.
  • CS9193: Az argumentumnak változónak kell lennie, mert egy paraméternek ref readonly továbbítja
  • CS9195: Az argumentumot a in kulcsszóval együtt kell átadni

A hibák kijavítása:

  • Egy tulajdonság vagy indexelő hozzáférés eredményét egy helyi változóban tárolja, mielőtt referenciaparaméterként ad át. A tulajdonságok és indexelők olyan metódusok , amelyek értékeket adnak vissza ahelyett, hogy közvetlen hozzáférést biztosítanak a tárolóhelyekhez, és a referenciaparaméterekhez egy stabil memóriahelyű, aliasként használható tényleges változóra van szükség (CS0206, CS1510).
  • Használja a in módosítót a ref helyett, amikor argumentumokat ad át a in paramétereknek. Bár ref technikailag a visszamenőleges kompatibilitás miatt működik, a in módosító egyértelműen kifejezi azt a szándékot, hogy az argumentum írásvédett, és másolás nélkül hatékonyabban továbbítható hivatkozásként (CS9191, CS9195).
  • Adja hozzá a megfelelő hivatkozásmódosítót (refvagy inref readonly) az argumentumok hivatkozásokat váró paramétereknek való átadásakor. A módosító kihagyása miatt a fordító létrehoz egy ideiglenes másolatot az értékről, ami nem hatékony, és váratlan működéshez vezethet, ha a hívó kód az eredeti változó módosításait (CS9192, CS9193) várja.

A referenciaparaméterekről és a változók referencia alapján történő átadásáról a metódusparaméterekről, a ref kulcsszóról és a C# nyelvi specifikációjáról olvashat bővebben.

A írható referenciaváltozók írható hivatkozási referenciát igényelnek

Egy írható referenciaváltozó megköveteli, hogy a hivatkozó is írható legyen. A következő hibák azt jelzik, hogy a változó nem írható:

  • CS0192: A readonly mező nem használható értékként ref vagy out értékként (a konstruktor kivételével)
  • CS0199: Egy static readonly mező nem használható értékként vagy ref értékként out (statikus konstruktor kivételével)
  • CS1605: A változó nem használható értékként vagy ref értékkéntout, mert írásvédett
  • CS1649: Egy readonly mező tagjai nem használhatók értékként ref vagy out értékként (a konstruktor kivételével)
  • CS1651: Egy static readonly mező mezői nem használhatók értékként ref vagy out értékként (statikus konstruktor kivételével)
  • CS1655: A típusmezők nem használhatók értékként vagy ref értékként out
  • CS1657: A változó nem használható értékként vagy ref értékként out
  • CS8329: A változó nem használható értékként vagy ref értékkéntout, mert írásvédett változó
  • CS8330: A változó tagjai nem használhatók értékként vagy ref értékkéntout, mert az egy olvasható változó
  • CS8331: Nem rendelhető hozzá a változóhoz, és nem használható a hozzárendelés jobb oldalán ref , mert az egy könnyen olvasható változó
  • CS8332: Nem rendelhető hozzá egy változó taghoz, és nem használható a hozzárendelés jobb oldalán ref , mert az egy olvasható változó

A hibák kijavítása:

  • Másolja az értéket egy írásvédett mezőből egy helyi változóba, és adja át a helyi változót ref vagy out paraméterként. Az olvasható mezők inicializálás után (a konstruktorok kivételével) nem módosíthatók, és a írható hivatkozások engedélyezése sérti az olvashatóságra vonatkozó garanciát (CS0192, CS0199, CS1649, CS1651).
  • ref readonly vagy in paramétereket használjon ref vagy out helyett, amikor írásvédett változókat, iterációs változókat vagy más nem írható értékeket kell hivatkozásként átadni. Ezek a módosítók azt jelzik, hogy a metódus csak a hivatkozott értéket olvassa be módosítás nélkül. Ez igazodik az eredeti változó nem módosíthatósági korlátaihoz (CS1605, CS1655, CS1657, CS8329).
  • Másolja az olvasható változók tagjait a helyi változókba, mielőtt írható hivatkozásként adja át őket. Annak ellenére, hogy maga a tag nem deklarálható írásvédettként, olvasási útvonalon keresztül érhető el (olvasható mezőn, in paraméteren vagy ref readonly helyien keresztül), és a fordító kényszeríti az írásvédettség tranzitivitását az olvasási adatok közvetett mutációjának megakadályozása érdekében (CS8330, CS8332).
  • Kerülje az írható értékek hozzárendelését a csak olvasható változókhoz, foreach iterációs változókhoz, using utasítás erőforrásaihoz, vagy fixed utasítás változóihoz. Ezek a változók speciális, élettartamra vonatkozó szemantikával rendelkeznek, amelyet a fordítóprogram kezel. A változó automatikusan véglegesítve lesz, vagy a hatókör végén lesz megsemmisítve. A külső hivatkozások megszüntetés után lógó hivatkozásokat hoznak létre (CS8331).

Az olvashatatlan szemantikáról és a referencia paraméterekről további információk a readonly kulcsszó, in paraméter módosító, ref readonly és a C# nyelvi specifikáció-ban találhatók.