Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel worden de volgende diagnostische gegevens van de compiler behandeld:
- CS0193: De operator * of -> moet worden toegepast op een aanwijzer
- CS0196: Een aanwijzer moet worden geïndexeerd met slechts één waarde
- nl-NL: CS0208: Kan het adres niet ophalen, de grootte niet verkrijgen, of geen aanwijzer naar een beheerd type declareren ('type')
-
CS0209: Het type lokaal gedeclareerd in een
fixedinstructie moet een aanwijzertype zijn -
CS0210: U moet een initialisatiefunctie opgeven in een
fixedofusingverklaring - CS0211: Kan het adres van de gegeven expressie niet nemen
-
CS0212: U kunt alleen het adres van een niet-gefixeerde expressie binnen een
fixedstatement-initialisator nemen -
CS0213: U kunt de
fixedinstructie niet gebruiken om het adres van een al vaste expressie te gebruiken - CS0214: Aanwijzers en buffers met vaste grootte kunnen alleen worden gebruikt in een onveilige context
-
CS0227: Onveilige code kan alleen worden weergegeven als er wordt ge compileren met
/unsafe - CS0233: 'id' heeft geen vooraf gedefinieerde grootte, daarom kan de grootte alleen worden gebruikt in een onveilige context
- CS0242: De betreffende bewerking is niet gedefinieerd voor void-pointers
-
CS0244: Noch '
is' noch 'as' is geldig voor aanwijzertypen - CS0254: De rechterkant van een fixed-statement-toewijzing mag geen cast-expressie zijn
- CS0459: Kan het adres van een alleen-lezen lokale variabele niet gebruiken
- CS0821: Impliciet getypte lokale variabelen kunnen niet worden opgelost
- CS1641: Een bufferveld met een vaste grootte moet de matrixgrootteaanduiding hebben na de veldnaam
- CS1642: Buffervelden met vaste grootte mogen alleen lid zijn van structs
- CS1656: Kan niet toewijzen aan 'variabele' omdat het een 'alleen-lezen variabel type' is
-
CS1663: Buffertype vaste grootte moet een van de volgende zijn:
bool,byte,short,int,longchar, ,sbyte,ushort,uint, , ofulongfloatdouble - CS1664: Buffer met vaste grootte van lengte 'lengte' en type 'type' is te groot
- CS1665: Buffers met vaste grootte moeten een lengte hebben die groter is dan nul
- CS1666: U kunt geen buffers met vaste grootte gebruiken die zijn opgenomen in niet-opgeloste expressies. Probeer de vaste instructie te gebruiken.
- CS1708: Buffers met een vaste grootte kunnen alleen toegankelijk zijn via lokale variabelen of velden
-
CS1716: Gebruik het kenmerk '
System.Runtime.CompilerServices.FixedBuffer' niet. Gebruik in plaats daarvan de 'fixed' veldmodifier. - CS1919: Onveilig type 'typenaam' kan niet worden gebruikt bij het maken van objecten
-
CS4004: Kan niet
awaitin een onveilige context - CS7092: Een vaste buffer heeft mogelijk slechts één dimensie.
-
CS8372: Gebruik het kenmerk '
System.Runtime.CompilerServices.FixedBuffer' niet voor een eigenschap - CS8385: De opgegeven expressie kan niet worden gebruikt in een vaste instructie
- CS8500: Hiermee wordt het adres van een beheerd type ('type') genomen, de grootte ervan bepaald of een pointer ernaar gedeclareerd
- CS8812: Kan de methodegroep 'method' niet converteren naar een niet-functieaanwijzer type 'type'.
- CS9049: Een vast veld mag geen referentieveld zijn.
-
CS9123: De operator '
&' mag niet worden gebruikt voor parameters of lokale variabelen in asynchrone methoden. - CS9360: Deze bewerking mag alleen worden gebruikt in een onveilige context
-
CS9361:
stackallocexpressie zonder initialisatiefunctie binnenSkipLocalsInitmag alleen worden gebruikt in een onveilige context -
CS9362: 'lid' moet worden gebruikt in een onveilige context omdat het is gemarkeerd als '
unsafe' - CS9363: 'lid' moet worden gebruikt in een onveilige context, omdat de aanwijzers in de handtekening staan
- CS9364: Onveilig lid 'lid' mag het veilige lid 'lid' niet overschrijven
- CS9365: Onveilig lid 'lid' kan niet impliciet veilig lid 'lid' implementeren
- CS9366: Onveilig lid 'lid' kan geen veilig lid 'lid' implementeren
-
CS9367:
RequiresUnsafeAttributekan niet worden toegepast op dit symbool. -
CS9368:
RequiresUnsafeAttributeis alleen geldig onder de bijgewerkte regels voor geheugenveiligheid. -
CS9376: Er is een onveilige context vereist voor de constructor 'constructor' die is gemarkeerd als '
unsafe' om te voldoen aan de beperking van denew()typeparameter 'type parameter' in 'algemeen type of methode' -
CS9377: De
unsafe'' modifier heeft hier geen effect onder de huidige regels voor geheugenveiligheid. -
CS9379: Gebruik
RequiresUnsafeAttribute'' niet in de bron; gebruik in plaats daarvan deunsafe'' modifier. -
CS9388: De
safemodifier mag alleen worden gebruikt voor 'extern' leden die niet zijn gemarkeerd als 'unsafe'. -
CS9389: '
extern' lid moet worden gemarkeerd met 'unsafe' of 'safe'. -
CS9390: Beide gedeeltelijke liddeclaraties moeten zijn gemarkeerd als '
safe' of beide mogen niet worden gemarkeerd als 'safe' -
CS9392: Veld in een expliciet of uitgebreid indelingstype moet worden gemarkeerd als '
unsafe' of 'safe'. -
CS9396: Kan modifiers '
safe' of 'unsafe' niet op zowel eigenschap of indexer 'property' als de accessor ervan opgeven. Verwijder een ervan. -
CS9397: Kan dezelfde '
unsafe' of 'safe'-modifier niet op alle accessors van de eigenschap of indexer 'property' opgeven. Plaats die modifier in plaats daarvan op de eigenschap zelf. -
CS9398: Kan await niet gebruiken in de context van een '
fixed'-instructie
Pointerbewerkingen en dereferencing
-
CS0193: De
*of->operator moet worden toegepast op een aanwijzer - CS0196: Een aanwijzer moet worden geïndexeerd met slechts één waarde
- CS0242: De betreffende bewerking is niet gedefinieerd op void-aanwijzers
Als u aanwijzerbewerkingen correct wilt gebruiken, volgt u de regels voor het deducteren, indexeren en rekenkundige bewerkingen. Zie Aanwijzertypen en Functie-aanwijzers voor meer informatie.
- Pas alleen de
*of->operator toe op gegevenspointers (CS0193). Gebruik deze operators niet met niet-aanwijzertypen of functiepointers. In tegenstelling tot in C/C++ kunt u functiepointers in C# niet dereferencen. - Indexpointers met slechts één waarde (CS0196). Pointers bieden geen ondersteuning voor multidimensionale indexering.
- Vermijd bewerkingen die niet zijn gedefinieerd voor ongeldige aanwijzers (CS0242). Verhoog bijvoorbeeld geen void-aanwijzer omdat de compiler de grootte van de gegevens waarnaar het verwijst niet weet.
Aanwijzertypen en beheerde typen
- CS0208: Kan het adres van een beheerd type ('type') niet verkrijgen, de grootte ervan niet bepalen, of een pointer ernaar niet declareren
- CS0233: 'id' heeft geen vooraf gedefinieerde grootte, daarom kan de grootte alleen worden gebruikt in een onveilige context
- CS8500: Hiermee wordt het adres van een beheerd type ('type') opgehaald, de grootte ervan bepaald of een pointer ernaar gedeclareerd
Als u met aanwijzers en de sizeof operator correct wilt werken, gebruikt u niet-beheerde typen en juiste contexten. Zie Niet-beheerde typen en de sizeof operator voor meer informatie.
- Gebruik alleen aanwijzers met niet-beheerde typen (CS0208). Neem niet het adres van, haal niet de grootte van, of declareer geen aanwijzers naar beheerde typen. Beheerde typen bevatten verwijzingstypen en structs die velden of eigenschappen van het verwijzingstype bevatten.
- Gebruik de operator in een
sizeofcontext bij het werken met typen waarvan deunsafegrootte geen compilatieconstante is (CS0233). - Vermijd het opvragen van het adres van, het bepalen van de grootte van of het declareren van een pointer naar een beheerd type (CS8500). Deze waarschuwing (niveau 4) wordt geactiveerd wanneer de compiler aanwijzerbewerkingen detecteert op beheerde typen. Een beheerd type is een verwijzingstype of een struct die een verwijzingstype als een veld of eigenschap bevat. Zie Niet-beheerde typen voor meer informatie.
Gebruik van vaste verklaringen
- CS0209: Het type lokaal gedeclareerd in een vaste instructie moet een aanwijzertype zijn
-
CS0210: U moet een initialisatiefunctie opgeven in een vaste of
usinginstructiedeclaratie - CS0211: Kan het adres van de gegeven expressie niet gebruiken
- CS0212: U kunt alleen het adres van een niet-gefixeerde expressie binnen een vast-instructie-initialisator gebruiken
- CS0213: U kunt de vaste instructie niet gebruiken om het adres van een reeds vaste expressie te gebruiken
- CS0254: De rechterkant van een toewijzing van een vaste instructie mag geen cast-expressie zijn
- CS0459: Kan het adres van een alleen-lezen lokale variabele niet gebruiken
- CS0821: Impliciet getypte lokale variabelen kunnen niet worden opgelost
- CS1656: Kan niet toewijzen aan 'variabele' omdat het een 'alleen-lezen variabel type' is
- CS8385: De opgegeven expressie kan niet worden gebruikt in een vaste instructie
Deze fouten treden op wanneer u de fixed instructie onjuist gebruikt. Met fixed de instructie voorkomt u dat de garbagecollector een verplaatsbare variabele verplaatst en een aanwijzer naar die variabele declareert. Zie Onveilige code en aanwijzers voor meer informatie.
Volg de volgende stappen om de fixed-instructie correct te gebruiken:
- Declareer de variabele als een aanwijzertype (CS0209).
- Geef een initialisatiefunctie op in de
fixedinstructiedeclaratie (CS0210). - Neem alleen het adres van geldige expressies: velden, lokale variabelen en pointer indirectie (CS0211). Neem niet het adres van berekende expressies, zoals de som van twee variabelen.
- Gebruik het adres van de operator voor niet-opgeloste expressies alleen binnen de initialisatiefunctie van de
fixedinstructie (CS0212). - Gebruik geen
fixedverklaring voor reeds vastgelegde uitdrukkingen (CS0213). Lokale variabelen en parameters in eenunsafemethode zijn al vastgezet op de stack. - Gebruik geen cast-expressies aan de rechterkant van een
fixedinstructietoewijzing (CS0254). - Gebruik niet het adres voor alleen-lezen lokale variabelen (CS0459). Variabelen in
foreachlussen,usinginstructies enfixedinstructies zijn alleen-lezen. Deze fout wordt niet meer geproduceerd door de huidige versies van de compiler. - Gebruik expliciete typen in plaats van
varinfixedinstructies (CS0821). - Wijs niet toe aan variabelen in alleen-lezencontexten, zoals
foreachlussen,usinginstructies offixedinstructies (CS1656). - Gebruik alleen expressies die geschikt zijn voor vastzetten in een
fixed-instructie (CS8385). De expressie moet een adresseerbare variabele, een tekenreeks of een type zijn dat een geschikteGetPinnableReferencemethode implementeert.
Onveilige contextvereisten
- CS0214: Aanwijzers en buffers met vaste grootte kunnen alleen worden gebruikt in een onveilige context
- CS0227: Onveilige code mag alleen verschijnen als gecompileerd wordt met /unsafe
-
CS0244: Noch '
is' noch 'as' is geldig voor pointertypen - CS1919: Onveilig type 'typenaam' kan niet worden gebruikt bij het maken van objecten
-
CS4004: Kan niet
awaitin een onveilige context -
CS9123: De operator '
&' mag niet worden gebruikt voor parameters of lokale variabelen in asynchrone methoden - CS9360: Deze bewerking mag alleen worden gebruikt in een onveilige context
-
CS9361:
stackallocexpressie zonder initialisatiefunctie binnenSkipLocalsInitmag alleen worden gebruikt in een onveilige context -
CS9362: 'lid' moet worden gebruikt in een onveilige context omdat het is gemarkeerd als '
unsafe' - CS9363: 'lid' moet worden gebruikt in een onveilige context, omdat de aanwijzers in de handtekening staan
-
CS9376: Er is een onveilige context vereist voor de constructor 'constructor' die is gemarkeerd als '
unsafe' om te voldoen aan de beperking van denew()typeparameter 'type parameter' in 'algemeen type of methode' -
CS9398: 'await' is niet toegestaan binnen de context van een '
fixed'-instructie
Deze diagnostische gegevens treden op wanneer u onveilige codeconstructies gebruikt zonder de vereiste unsafe context of wanneer u bewerkingen probeert uit te voeren die niet zijn toegestaan met onveilige typen. Zie Onveilige code en aanwijzers en het unsafe trefwoord voor meer informatie.
- Methoden, typen of codeblokken markeren die gebruikmaken van aanwijzers of buffers met vaste grootte met het
unsafetrefwoord (CS0214). Voor de compiler is een expliciet onveilige context vereist voor code die werkt met aanwijzertypen of buffervelden met vaste grootte. - Schakel de optie AllowUnsafeBlocks Compiler in uw projectinstellingen (CS0227) in. Zonder deze optie weigert de compiler alle
unsafeblokken, zelfs als de code anders juist is. - Gebruik de operators
isofasniet met aanwijzertypen (CS0244). Deze operatoren voor typetests zijn niet geldig voor aanwijzers omdat aanwijzers niet deelnemen aan de typehiërarchie. - Gebruik de
newoperator niet om exemplaren van het type aanwijzer te maken (CS1919). Als u objecten in onbeheerd geheugen wilt maken, gebruikt u interop om systeemeigen methoden aan te roepen die pointers retourneren. - Behandelt CS4004 als verouderde richtlijnen. In C# 14 en eerder is
awaitbinnen een onveilige context niet toegestaan. Volgens de previewwijzigingen voor geheugensafety in C# 15 isawaittoegestaan in een onveilige context, zodat deze algemene beperking de huidige regel niet langer beschrijft. - Gebruik het adres van de operator (
&) niet voor parameters of lokale variabelen in asynchrone methoden (CS9123). De variabele bestaat mogelijk niet op de stack wanneer de asynchrone bewerking na een veringspunt wordt hervat. - Markeer bewerkingen die betrekking hebben op onveilige constructies (zoals aanwijzerdeductie, adres-of, of
sizeofonbeheerde typen) met hetunsafetrefwoord (CS9360). Onder de bijgewerkte regels voor geheugenveiligheid van C# 15 identificeert de compiler afzonderlijke bewerkingen waarvoor een onveilige context is vereist. - Gebruik het
unsafetrefwoord voorstackallocexpressies zonder initialisaties wanneer hetSkipLocalsInitkenmerk wordt toegepast (CS9361). Zonder initialisatie bevat het aan de stack toegewezen geheugen niet-geïnitialiseerde gegevens. Dit is een onveilige bewerking. - Gebruik een
unsafecontext bij het aanroepen van leden die zijn gemarkeerdunsafe(CS9362) of leden met aanwijzers in hun handtekeningen (CS9363). Onder het bijgewerkte model voor geheugenveiligheid rapporteert de compiler CS9362 voor leden die expliciet de veiligheidsverplichting doorgeven aan de aanroeper en CS9363 voor verouderde compatibiliteitsgevallen waarbij de handtekening zelf aanwijzers bevat. - Gebruik een
unsafecontext wanneer voor eennew()beperking een constructor moet worden aangeroepen die is gemarkeerdunsafe(CS9376). De algemene instantiëring roept de constructor impliciet aan, zodat de aanroepende context onveilig moet zijn. - Verplaats
awaitbuiten de hoofdtekst of initialisatiefunctie van eenfixedinstructie (CS9398). Met de C# 15-preview isawaittoegestaan in een unsafe-context, maar de pinning-levensduur van eenfixedstatement kan nog steeds geen asynchroon onderbrekingspunt overspannen. Wacht op de bewerking voordat ufixedbinnengaat, of verlaat de instructiefixedvoordat u wacht.
Onveilige veiligheidscontracten voor leden
- CS9364: Onveilig lid 'lid' kan het veilige lid 'lid' niet overschrijven
- CS9365: Onveilig lid 'lid' kan niet impliciet veilig lid 'lid' implementeren
- CS9366: Onveilig lid 'lid' kan geen veilig lid 'lid' implementeren
-
CS9367:
RequiresUnsafeAttributekan niet worden toegepast op dit symbool. -
CS9368:
RequiresUnsafeAttributeis alleen geldig onder de bijgewerkte regels voor geheugenveiligheid. -
CS9377: De
unsafe'' modifier heeft hier geen effect onder de huidige regels voor geheugenveiligheid. -
CS9379: Gebruik
RequiresUnsafeAttribute'' niet in de bron; gebruik in plaats daarvan deunsafe'' modifier. -
CS9388: De
safemodifier mag alleen worden gebruikt voor 'extern' leden die niet zijn gemarkeerd als 'unsafe'. -
CS9389: '
extern'-lid moet worden gemarkeerd met 'unsafe' of 'safe'. -
CS9390: Beide gedeeltelijke liddeclaraties moeten zijn gemarkeerd als '
safe' of beide mogen niet worden gemarkeerd als 'safe' -
CS9396: Kan de modificaties '
safe' of 'unsafe' niet op zowel eigenschap of indexer 'property' als de accessor ervan opgeven. Verwijder er een van. -
CS9397: U kunt niet dezelfde modificatie '
unsafe' of 'safe' opgeven voor alle accessors van eigenschap of indexer 'property'. Plaats die modificatie in plaats daarvan op de eigenschap zelf.
Deze diagnostische gegevens dwingen de regels voor het C# 15-veiligheidscontract af voor leden die als onveilig zijn gemarkeerd. De compiler zorgt ervoor dat onveilige leden niet in strijd zijn met de veiligheids verwachtingen die zijn vastgesteld door basisklassen en interfaces. Zie Onveilige code en aanwijzers en het unsafe trefwoord voor meer informatie.
- Overschrijf geen veilig basislid met een onveilig lid (CS9364). Een overschrijving moet het veiligheidscontract van het basiselement behouden. Als het basislid veilig is, moet de overschrijving ook veilig zijn. Verwijder de
unsafemodifier van het overschrijvende lid ofRequiresUnsafeAttribute, of markeer het basislid als onveilig. - Implementeer geen veilig interfacelid impliciet met een onveilig lid (CS9365). Wanneer een type impliciet een interfacelid implementeert, verwachten bellers via de interface een veilige bewerking. Verwijder de onveilige aanduiding uit het implementatielid of gebruik expliciete interface-implementatie.
- Implementeer geen veilig interfacelid met een onveilig lid (CS9366). Zelfs bij expliciete implementatie moet het veiligheidscontract van het interfacelid behouden blijven.
- Alleen van toepassing op
RequiresUnsafeAttributeondersteunde symbooltypen (CS9367). Dit kenmerk kan worden toegepast op methoden, eigenschappen, gebeurtenissen, constructeurs en typen, maar niet alle symboolsoorten ondersteunen het. - Schakel de bijgewerkte regels voor geheugenveiligheid in om te gebruiken
RequiresUnsafeAttribute(CS9368). Dit kenmerk maakt deel uit van het verfijnde model voor geheugenveiligheid van C# 15 en wordt niet herkend onder verouderde regels. Zorg ervoor dat uw project is gericht op een taalversie die de bijgewerkte regels ondersteunt. - Verwijder de
unsafewijzigingsfunctie wanneer dit geen effect heeft (CS9377). Onder de huidige regels voor geheugenveiligheid zijn bepaalde contexten niet vereist of profiteren van deunsafewijzigingsfunctie. De compiler waarschuwt wanneer de modifier betekenisloos is, zodat u onnodige aantekeningen kunt opschonen. - Gebruik de
unsafewijzigingsfunctie rechtstreeks op de liddeclaratie in plaats van toe te passenRequiresUnsafeAttributein de bron (CS9379). Het kenmerk is alleen bedoeld voor metagegevensweergave; in broncode is hetunsafetrefwoord het juiste mechanisme. - Pas de
safewijzigingsfunctie alleen toe opexternleden die nog niet zijn gemarkeerdunsafe(CS9388). Desafewijzigingsfunctie kiest expliciet een extern lid uit de standaard onveilige aanname voor externe declaraties. - Markeer elk
extern-lid alsunsafeofsafe(CS9389). Onder de bijgewerkte regels voor geheugenveiligheid moeten externe leden expliciet hun veiligheidscontract declareren omdat de compiler de implementatie niet kan verifiëren. - Zorg ervoor dat beide gedeeltelijke declaraties van leden overeenkomen wat betreft de
safemodifier (CS9390). Als een gedeeltelijke verklaring wordt gemarkeerdsafe, moet de andere ook worden gemarkeerdsafeom een consistent veiligheidscontract te handhaven. - Plaats
unsafeofsafeop de eigenschap of indexeerfunctie, of op een accessor, maar niet beide (CS9396). Als de eigenschap het contract voor alle accessoren bepaalt, plaatst u de modifier op de eigenschap zelf. Als slechts één accessor verschilt, zet u de modifier op die accessor en laat u de eigenschap ongewijzigd. - Als elke accessor van een eigenschap of indexeerfunctie dezelfde modifier
unsafeofsafeheeft, verplaats die modifier dan naar de declaratie van de eigenschap of indexeerfunctie (CS9397). Gebruik accessormodifiers alleen als de accessors opzettelijk verschillen.
Expliciete of uitgebreide indelingsvelden
-
CS9392: Veld in een expliciet of uitgebreid indelingstype moet worden gemarkeerd als '
unsafe' of 'safe'.
Deze diagnostische melding treedt op binnen het bijgewerkte model voor geheugenveiligheid wanneer een exemplaarveld deel uitmaakt van een expliciete of uitgebreide layout en in de declaratie niet wordt aangegeven of het veld safe of unsafe is. Zie Onveilige code en aanwijzers en het safe trefwoord voor meer informatie.
- Markeer elk instantieveld in een type met
[StructLayout(LayoutKind.Explicit)]of[ExtendedLayout]als ofwelunsafeofsafe(CS9392). Als het veld is gesynthetiseerd voor een automatische eigenschap, eigenschap met veldsteun, parameter voor primaire constructor of veldachtige gebeurtenis, plaatst u de wijzigingsfunctie op de eigenschap, parameter of gebeurtenis die eigenaar is van dat gegenereerde veld.
Buffers met vaste grootte
- CS1641: Een bufferveld met een vaste grootte moet de matrixgrootteaanduiding hebben na de veldnaam
- CS1642: Buffervelden met vaste grootte mogen alleen lid zijn van structs
-
CS1663: Buffertype vaste grootte moet een van de volgende zijn:
bool,byte,short,int,longchar, ,sbyte,ushort,uint, , ofulongfloatdouble - CS1664: Buffer met vaste grootte van lengte 'lengte' en type 'type' is te groot
- CS1665: Buffers met vaste grootte moeten een lengte hebben die groter is dan nul
- CS1666: U kunt geen buffers met vaste grootte gebruiken die zijn opgenomen in niet-opgeloste expressies. Probeer de vaste instructie te gebruiken.
- CS1708: Buffers met vaste grootte kunnen alleen worden benaderd via lokale variabelen of velden
-
CS1716: Gebruik het kenmerk '
System.Runtime.CompilerServices.FixedBuffer' niet. Gebruik in plaats daarvan de veldmodifier 'fixed'. - CS7092: Een vaste buffer heeft mogelijk slechts één dimensie.
-
CS8372: Gebruik het kenmerk '
System.Runtime.CompilerServices.FixedBuffer' niet voor een eigenschap - CS9049: Een fixed-veld mag geen ref-veld zijn.
Deze fouten treden op wanneer u met buffers met vaste grootte werkt. Buffers met vaste grootte zijn matrices die rechtstreeks zijn ingesloten in structs en worden voornamelijk gebruikt voor interop-scenario's. Zie Buffers met vaste grootte voor meer informatie.
Ga als volgende te werk om buffers met vaste grootte correct te declareren en te gebruiken:
- Geef de matrixgrootte op na de veldnaam met behulp van een positieve geheel getalconstante (CS1641, CS1665). De totale grootte van de buffer (aantal elementen vermenigvuldigd met elementgrootte) mag niet groter zijn dan 2^31 bytes (CS1664).
- Declareer buffers met vaste grootte alleen in structs, niet in klassen (CS1642). Gebruik een gewone matrix als u het veld in een klasse nodig hebt.
- Gebruik een van de ondersteunde elementtypen:
bool, ,byteshort,int, ,long, ,charsbyteushortuintulong, , offloatdouble(CS1663). - Gebruik een
fixedinstructie om de bevatde struct vast te maken voordat u de buffer opent (CS1666). - Toegang tot buffers met vaste grootte alleen via lokale variabelen of velden, niet via tussenliggende expressies (CS1708).
- Gebruik de
fixedveldaanpassing in plaats van hetSystem.Runtime.CompilerServices.FixedBufferkenmerk (CS1716). Pas dit kenmerk niet toe op eigenschappen (CS8372). - Vaste buffers declareren met slechts één dimensie (CS7092). Multidimensionale vaste buffers worden niet ondersteund.
- Declareer geen buffers met vaste grootte als
refvelden (CS9049). Buffers met een vaste grootte moeten waardevelden zijn.
Functieaanwijzers
- CS8812: Kan de methodegroep 'method' niet converteren naar een niet-functieaanwijzer type 'type'.
Als u een functieaanwijzer wilt ophalen, gebruikt u het adres van de operator met een expliciete functieaanwijzertype cast. Gebruik het adres van de operator & niet om methodegroepen toe te wijzen aan void* of andere niet-functiepointertypen. Zie Functie-aanwijzers voor meer informatie.