Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel werden die folgende Compilerdiagnose behandelt:
- CS0193: Der * oder -> Operator muss auf einen Zeiger angewendet werden.
- CS0196: Ein Zeiger muss nur mit einem Wert indiziert werden.
- CS0208: Kann die Adresse nicht annehmen, die Größe abrufen oder einen Zeiger auf einen verwalteten Typ deklarieren ('Typ')
-
CS0209: Der Typ eines in einer
fixedAnweisung deklarierten lokalen Typs muss ein Zeigertyp sein. -
CS0210: Sie müssen einen Initialisierer in einer
fixedoderusingDeklaration angeben. - CS0211: Die Adresse des angegebenen Ausdrucks kann nicht abgerufen werden.
-
CS0212: Die Adresse eines nicht fixierten Ausdrucks kann nur in einem
fixed-Anweisungsinitialisierer abgerufen werden. -
CS0213: Sie können die
fixedAnweisung nicht verwenden, um die Adresse eines bereits festen Ausdrucks zu übernehmen. - CS0214: Zeiger und Puffer mit fester Größe können nur in unsicherem Kontext verwendet werden.
-
CS0227: Unsicherer Code kann nur angezeigt werden, wenn kompiliert mit
/unsafe - CS0233: "Identifier" hat keine vordefinierte Größe, daher kann sizeof nur in einem unsicheren Kontext verwendet werden.
- CS0242: Der fragliche Vorgang ist für leere Zeiger nicht definiert.
-
CS0244: Weder '
is' noch 'as' ist für Zeigertypen gültig - CS0254: Die rechte Seite einer fixed-Anweisungszuweisung darf kein cast-Ausdruck sein.
- CS0459: Die Adresse einer schreibgeschützten lokalen Variablen kann nicht ermittelt werden.
- CS0821: Implizit typierte lokale Variablen können nicht behoben werden
- CS1641: Ein Pufferfeld mit fester Größe muss den Arraygrößenbezeichner nach dem Feldnamen aufweisen.
- CS1642: Pufferfelder mit fester Größe dürfen nur Elemente von Strukturen sein.
- CS1656: Eine Zuweisung an „Variable“ ist nicht möglich, da sie schreibgeschützt ist.
-
CS1663: Der Puffertyp mit fester Größe muss einer der folgenden sein:
bool,byte,short,int,long,char,sbyte,ushort,uint,ulong,floatoderdouble - CS1664: Puffer fester Größe mit der Länge 'length' und dem Typ 'type' ist zu groß
- CS1665: Puffer mit fester Größe müssen eine Länge größer als 0 haben.
- CS1666: Sie können keine Puffer mit fester Größe verwenden, die in nicht behobenen Ausdrücken enthalten sind. Versuchen Sie, die feste Anweisung zu verwenden.
- CS1708: Auf Puffer mit fester Größe kann nur über Lokale oder Felder zugegriffen werden.
-
CS1716: Verwenden Sie nicht das Attribut "
System.Runtime.CompilerServices.FixedBuffer". Verwenden Sie stattdessen den Feldmodifizierer "fixed". - CS1919: Unsicherer Typ "Typname" kann in der Objekterstellung nicht verwendet werden.
-
CS4004: In einem unsicheren Kontext nicht
awaitmöglich - CS7092: Ein fester Puffer darf nur eine Dimension aufweisen.
-
CS8372: Verwenden Sie kein '
System.Runtime.CompilerServices.FixedBuffer' Attribut für eine Eigenschaft - CS8385: Der angegebene Ausdruck kann nicht in einer festen Anweisung verwendet werden.
- CS8500: Dies nimmt die Adresse von, ermittelt die Größe von oder deklariert einen Zeiger auf einen verwalteten Typ ('type')
- CS8812: Die Methodengruppe 'method' kann nicht in den Nicht-Funktions-Zeigertyp 'type' konvertiert werden.
- CS9049: Ein festes Feld darf kein Verweisfeld sein.
-
CS9123: Der Operator "
&" sollte nicht für Parameter oder lokale Variablen in asynchronen Methoden verwendet werden. - CS9360: Dieser Vorgang kann nur in einem unsicheren Kontext verwendet werden.
-
CS9361:
stackallocAusdruck ohne Initialisierer innerhalbSkipLocalsInitdarf nur in einem unsicheren Kontext verwendet werden. -
CS9362: "Member" muss in einem unsicheren Kontext verwendet werden, da es als "
RequiresUnsafe" oder "extern" gekennzeichnet ist. - CS9363: "member" muss in einem unsicheren Kontext verwendet werden, da es Zeiger in seiner Signatur enthält.
- CS9364: Der unsichere Member „Member“ kann den sicheren Member „Member“ nicht überschreiben.
- CS9365: Der unsichere Member „Member“ kann den sicheren Member „Member“ nicht implizit implementieren.
- CS9366: Der unsichere Member „Member“ kann den sicheren Member „Member“ nicht implementieren.
-
CS9367:
RequiresUnsafeAttributeAuf dieses Symbol kann nicht angewendet werden. -
CS9368:
RequiresUnsafeAttributeist nur unter den aktualisierten Speichersicherheitsregeln gültig. -
CS9376: Für den Konstruktor „Konstruktor“, der als „
RequiresUnsafe“ oder „extern“ markiert ist, ist ein unsicherer Kontext erforderlich, um die Einschränkung „new()“ des Typparameters „Typparameter“ in „generischer Typ oder Methode“ zu erfüllen. -
CS9377: Der Modifizierer "
unsafe" hat hier keine Auswirkungen unter den aktuellen Speichersicherheitsregeln. -
CS9379: Verwenden Sie nicht "
RequiresUnsafeAttribute" in der Quelle; verwenden Sie stattdessen den Modifizierer "unsafe". -
CS9388: Der Modifizierer '
safe' darf nur für 'extern' Elemente verwendet werden, die nicht als 'unsafe' gekennzeichnet sind. -
CS9389: "
extern" Mitglied muss als "unsafe" oder "safe" gekennzeichnet sein. -
CS9390: Beide partiellen Memberdeklarationen müssen als „
safe“ markiert sein, oder keine von beiden darf als „safe“ markiert sein.
Zeigeroperationen und Dereferenzierung
-
CS0193: Der
*- oder->-Operator muss auf einen Zeiger angewendet werden. - CS0196: Ein Zeiger muss nur mit einem Wert indiziert werden.
- CS0242: Der fragliche Vorgang ist für leere Zeiger nicht definiert.
Um Zeigervorgänge richtig zu verwenden, befolgen Sie die Regeln für die Ableitung, Indizierung und arithmetische Vorgänge. Weitere Informationen finden Sie unter Zeigertypen und Funktionszeiger.
- Wenden Sie den
*- oder->-Operator nur auf Datenzeiger (CS0193) an. Verwenden Sie diese Operatoren nicht mit Nichtpointertypen oder Funktionszeigern. Im Gegensatz zu C/C++ können Sie in C# Funktionszeiger nicht dereferenzieren. - Indexzeiger mit nur einem Wert (CS0196). Die mehrdimensionale Indizierung wird für Zeiger nicht unterstützt.
- Vermeiden Sie Vorgänge, die für leere Zeiger (CS0242) nicht definiert sind. Erhöhen Sie z. B. keinen leeren Zeiger, da der Compiler nicht die Größe der Daten kennt, auf die verwiesen wird.
Zeigertypen und verwaltete Typen
- CS0208: Kann die Adresse nicht annehmen, die Größe abrufen oder einen Zeiger auf einen verwalteten Typ deklarieren ('Typ')
- CS0233: "Identifier" hat keine vordefinierte Größe, daher kann sizeof nur in einem unsicheren Kontext verwendet werden.
- CS8500: Dadurch wird die Adresse eines verwalteten Typs („Typ“) abgerufen, dessen Größe abgerufen oder ein Zeiger auf diesen deklariert.
Verwenden Sie nicht verwaltete Typen und ordnungsgemäße Kontexte, um mit Zeigern und dem sizeof Operator ordnungsgemäß zu arbeiten. Weitere Informationen finden Sie unter "Nicht verwaltete Typen " und " sizeof Operator".
- Verwenden Sie Zeiger nur für nicht verwaltete Typen (CS0208). Rufen Sie nicht die Adresse oder die Größe von verwalteten Typen ab, und deklarieren Sie keine Zeiger auf diese. Verwaltete Typen umfassen Referenztypen und -strukturen, die Referenztypfelder oder -eigenschaften enthalten.
- Verwenden Sie den
sizeofOperator innerhalb einesunsafeKontexts, wenn Sie mit Typen arbeiten, deren Größe keine Kompilierungszeitkonstante (CS0233) ist. - Vermeiden Sie es, die Adresse oder die Größe eines verwalteten Typs abzurufen oder einen Zeiger auf diesen zu deklarieren (CS8500). Diese Warnung (Ebene 4) wird ausgelöst, wenn der Compiler Zeigervorgänge für verwaltete Typen erkennt. Ein verwalteter Typ ist ein beliebiger Bezugstyp oder eine beliebige Struktur, die einen Verweistyp als Feld oder Eigenschaft enthält. Weitere Informationen finden Sie unter "Nicht verwaltete Typen".
Feste Anweisungsverwendung
- CS0209: Der Typ eines in einer festen Anweisung deklarierten lokalen Typs muss ein Zeigertyp sein.
-
CS0210: Sie müssen in einer festen Deklaration oder
using-Anweisung einen Initialisierer angeben. - CS0211: Die Adresse des angegebenen Ausdrucks kann nicht abgerufen werden.
- CS0212: Die Adresse eines nicht fixierten Ausdrucks kann nur in einem fixed-Anweisungsinitialisierer abgerufen werden.
- CS0213: Sie können die fixed-Anweisung nicht verwenden, um die Adresse eines bereits fixierten Ausdrucks abzurufen.
- CS0254: Die rechte Seite einer fixed-Anweisungszuweisung darf kein cast-Ausdruck sein.
- CS0459: Kann die Adresse einer schreibgeschützten lokalen Variablen nicht nehmen.
- CS0821: Implizit typierte lokale Variablen können nicht behoben werden
- CS1656: 'Variable' kann nicht zugewiesen werden, da es sich um einen schreibgeschützten Variablentyp handelt.
- CS8385: Der angegebene Ausdruck kann nicht in einer festen Anweisung verwendet werden.
Diese Fehler treten auf, wenn Sie die fixed Anweisung falsch verwenden. Die fixed Anweisung verhindert, dass der Garbage Collector eine verschiebbare Variable versetzt, und deklariert einen Zeiger auf diese Variable. Weitere Informationen finden Sie unter "Unsicherer Code und Zeiger".
So verwenden Sie die fixed Anweisung richtig:
- Deklarieren Sie die Variable als Zeigertyp (CS0209).
- Stellen Sie einen Initialisierer in der
fixed-Anweisungsdeklaration bereit (CS0210). - Rufen Sie die Adresse nur von gültigen Ausdrücken ab: Felder, lokale Variablen und Zeigerindirektion (CS0211). Rufen Sie nicht die Adresse von berechneten Ausdrücken wie der Summe zweier Variablen ab.
- Verwenden Sie den address-of-Operator für nicht fixierte Ausdrücke nur innerhalb des
fixed-Anweisungsinitialisierers (CS0212). - Verwenden Sie keine
fixed-Anweisung für bereits behobene Ausdrücke (CS0213). Lokale Variablen und Parameter in einerunsafeMethode sind bereits im Stack behoben. - Verwenden Sie keine cast-Ausdrücke auf der rechten Seite einer
fixed-Anweisungszuweisung (CS0254). - Rufen Sie nicht die Adresse von schreibgeschützten lokalen Variablen ab (CS0459). Variablen in
foreach-Schleifen,using-Anweisungen undfixed-Anweisungen sind schreibgeschützt. Dieser Fehler wird nicht mehr von aktuellen Versionen des Compilers erstellt. - Verwenden Sie explizite Typen anstelle von
varinfixed-Anweisungen (CS0821). - Weisen Sie Variablen in schreibgeschützten Kontexten wie
foreach-Schleifen,using-Anweisungen oderfixed-Anweisungen keine Werte zu (CS1656). - Verwenden Sie nur Ausdrücke, die das Anheften in einer
fixed-Anweisung unterstützen (CS8385). Der Ausdruck muss eine adressierbare Variable, eine Zeichenfolge oder ein Typ sein, der eine geeigneteGetPinnableReferenceMethode implementiert.
Unsichere Kontextanforderungen
- CS0214: Zeiger und Puffer mit fester Größe können nur in unsicherem Kontext verwendet werden.
- CS0227: Unsicherer Code kann nur angezeigt werden, wenn die Kompilierung mit /unsafe erfolgt.
-
CS0244: Weder '
is' noch 'as' ist für Zeigertypen gültig - CS1919: Unsicherer Typ "Typname" kann in der Objekterstellung nicht verwendet werden.
-
CS4004: In einem unsicheren Kontext nicht
awaitmöglich -
CS9123: Der Operator '
&' sollte nicht für Parameter oder lokale Variablen in asynchronen Methoden verwendet werden. - CS9360: Dieser Vorgang kann nur in einem unsicheren Kontext verwendet werden.
-
CS9361:
stackallocAusdruck ohne Initialisierer innerhalb vonSkipLocalsInitdarf nur in einem unsicheren Kontext verwendet werden. -
CS9362: "Member" muss in einem unsicheren Kontext verwendet werden, da es als "
RequiresUnsafe" oder "extern" gekennzeichnet ist. - CS9363: "member" muss in einem unsicheren Kontext verwendet werden, da es Zeiger in seiner Signatur enthält.
-
CS9376: Für den Konstruktor „Konstruktor“, der als „
RequiresUnsafe“ oder „extern“ markiert ist, ist ein unsicherer Kontext erforderlich, um die Einschränkung „new()“ des Typparameters „Typparameter“ in „generischer Typ oder Methode“ zu erfüllen.
Diese Diagnose tritt auf, wenn Sie unsichere Codekonstrukte ohne den erforderlichen unsafe Kontext verwenden oder versuchen, Vorgänge auszuführen, die mit unsicheren Typen nicht zulässig sind. Weitere Informationen finden Sie unter "Unsicherer Code und Zeiger und das unsafe Schlüsselwort".
- Markieren Sie Methoden, Typen oder Codeblöcke, die Zeiger oder Puffer mit fester Größe mit dem
unsafeSchlüsselwort (CS0214) verwenden. Der Compiler erfordert einen expliziten unsicheren Kontext für code, der mit Zeigertypen oder Pufferfeldern mit fester Größe funktioniert. - Aktivieren Sie die Compileroption AllowUnsafeBlocks in Ihren Projekteinstellungen (CS0227). Ohne diese Option lehnt der Compiler alle
unsafeBlöcke ab, auch wenn der Code andernfalls korrekt ist. - Verwenden Sie die
isasOperatoren nicht mit Zeigertypen (CS0244). Diese Typtestoperatoren sind für Zeiger nicht gültig, da Zeiger nicht an der Typhierarchie teilnehmen. - Verwenden Sie den
newOperator nicht zum Erstellen von Zeigertypinstanzen (CS1919). Um Objekte im nicht verwalteten Speicher zu erstellen, verwenden Sie Interop, um systemeigene Methoden aufzurufen, die Zeiger zurückgeben. - Schützen Sie unsicheren Code getrennt von asynchronem Code (CS4004). Der Compiler lässt keine
await-Ausdrücke innerhalb einesunsafe-Blocks zu, da die Laufzeit die Gültigkeit von Zeigern über Unterbrechungspunkte hinweg nicht garantieren kann. Erstellen Sie separate Methoden für unsichere Vorgänge, und rufen Sie sie aus asynchronen Methoden auf. - Verwenden Sie die Adresse des Operators (
&) nicht für Parameter oder lokale Variablen in asynchronen Methoden (CS9123). Die Variable ist möglicherweise nicht im Stapel vorhanden, wenn der asynchrone Vorgang nach einem Anhaltepunkt fortgesetzt wird. - Markieren Sie Vorgänge, die unsichere Konstrukte beinhalten (z. B. Zeigerdereferenzierung, address-of oder
sizeoffür nicht verwaltete Typen), mit dem Schlüsselwortunsafe(CS9360). Unter den aktualisierten Speichersicherheitsregeln von C# 15 identifiziert der Compiler einzelne Vorgänge, die einen unsicheren Kontext erfordern. - Verwenden Sie das
unsafeSchlüsselwort fürstackallocAusdrücke ohne Initialisierer, wenn dasSkipLocalsInitAttribut angewendet wird (CS9361). Ohne Initialisierer enthält der vom Stapel zugewiesene Speicher nicht initialisierte Daten, bei denen es sich um einen unsicheren Vorgang handelt. - Verwenden Sie einen
unsafeKontext, wenn Sie Mitglieder aufrufen, die mitRequiresUnsafeoderextern(CS9362) gekennzeichnet sind, oder Member mit Zeigern in ihren Signaturen (CS9363). Der C# 15-Compiler verfolgt die Verwendung unsicherer Member an der Aufrufstelle, nicht nur bei der Deklaration. - Verwenden Sie einen
unsafeKontext, wenn für einenew()Einschränkung ein Konstruktor aufgerufen werden muss, der mitRequiresUnsafeoderextern(CS9376) gekennzeichnet ist. Die generische Instanziierung ruft den Konstruktor implizit auf, sodass der aufrufende Kontext unsicher sein muss.
Unsichere Sicherheitsverträge für Mitglieder
- CS9364: Unsicheres Mitglied "member" kann das sichere Mitglied "member" nicht überschreiben.
- CS9365: Der unsichere Member „Member“ kann den sicheren Member „Member“ nicht implizit implementieren.
- CS9366: Der unsichere Member „Member“ kann den sicheren Member „Member“ nicht implementieren.
-
CS9367:
RequiresUnsafeAttributekann nicht auf dieses Symbol angewendet werden. -
CS9368:
RequiresUnsafeAttributeist nur unter den aktualisierten Speichersicherheitsregeln gültig. -
CS9377: Der Modifizierer "
unsafe" hat hier keine Auswirkungen unter den aktuellen Speichersicherheitsregeln. -
CS9379: Verwenden Sie nicht "
RequiresUnsafeAttribute" in der Quelle; verwenden Sie stattdessen den Modifizierer "unsafe". -
CS9388: Der Modifizierer '
safe' darf nur für 'extern' Elemente verwendet werden, die nicht als 'unsafe' gekennzeichnet sind. -
CS9389: "
extern" Mitglied muss als "unsafe" oder "safe" gekennzeichnet sein. -
CS9390: Beide partiellen Memberdeklarationen müssen mit „
safe“ gekennzeichnet sein, oder keine von beiden darf mit „safe“ gekennzeichnet sein
Diese Diagnose erzwingt die C# 15-Sicherheitsvertragsregeln für Mitglieder, die als unsicher gekennzeichnet sind. Der Compiler stellt sicher, dass unsichere Member nicht gegen die Sicherheitserwartungen verstoßen, die von Basisklassen und Schnittstellen festgelegt wurden. Weitere Informationen finden Sie unter "Unsicherer Code und Zeiger und das unsafe Schlüsselwort".
- Überschreiben Sie keinen sicheren Basismember mit einem unsicheren Member (CS9364). Eine Überschreibung muss den Sicherheitsvertrag des Basismembers beibehalten. Wenn der Basismember sicher ist, muss auch die Überschreibung sicher sein. Entfernen Sie den Modifizierer
unsafeoderRequiresUnsafeAttributeaus dem überschreibenden Member, oder markieren Sie den Basismember als unsicher. - Implementieren Sie nicht implizit ein sicheres Schnittstellenmitglied mit einem unsicheren Mitglied (CS9365). Wenn ein Typ implizit ein Schnittstellenelement implementiert, erwarten Aufrufer über die Schnittstelle einen sicheren Vorgang. Entfernen Sie die unsichere Bezeichnung aus dem implementierenden Mitglied, oder verwenden Sie die explizite Schnittstellenimplementierung.
- Implementieren Sie einen sicheren Schnittstellenmember nicht explizit mit einem unsicheren Member (CS9366). Auch bei expliziter Implementierung muss der Sicherheitsvertrag des Schnittstellenmitglieds beibehalten werden.
- Gilt nur für
RequiresUnsafeAttributeunterstützte Symboltypen (CS9367). Dieses Attribut kann auf Methoden, Eigenschaften, Ereignisse, Konstruktoren und Typen angewendet werden, aber nicht alle Symboltypen unterstützen es. - Aktivieren Sie die aktualisierten Speichersicherheitsregeln zur Verwendung von
RequiresUnsafeAttribute(CS9368). Dieses Attribut ist Teil des optimierten Speichersicherheitsmodells von C# 15 und wird unter älteren Regeln nicht erkannt. Stellen Sie sicher, dass Ihr Projekt auf eine Sprachversion ausgerichtet ist, die die aktualisierten Regeln unterstützt. - Entfernen Sie den
unsafeModifizierer, wenn er keine Auswirkung hat (CS9377). Unter den aktuellen Speichersicherheitsregeln benötigen oder profitieren bestimmte Kontexte nicht vomunsafeModifizierer. Der Compiler warnt, wenn der Modifizierer bedeutungslos ist, damit Sie unnötige Anmerkungen bereinigen können. - Verwenden Sie den
unsafe-Modifizierer direkt bei der Memberdeklaration, anstattRequiresUnsafeAttributeim Quellcode anzuwenden (CS9379). Das Attribut ist nur für die Metadatendarstellung vorgesehen; im Quellcode ist dasunsafeSchlüsselwort der richtige Mechanismus. - Wenden Sie den
safeModifizierer nur auf Elemente anextern, die noch nicht markiertunsafesind (CS9388). Der Modifizierersafeschließt einen extern-Member explizit von der standardmäßigen Annahme „unsicher“ für extern-Deklarationen aus. - Markieren Sie jedes
externMitglied als entwederunsafeodersafe(CS9389). Unter den aktualisierten Speichersicherheitsregeln müssen externe Mitglieder explizit ihren Sicherheitsvertrag deklarieren, da der Compiler die Implementierung nicht überprüfen kann. - Stellen Sie sicher, dass beide partiellen Mitglieddeklarationen beim Modifizierer
safeübereinstimmen (CS9390). Wenn eine Teilerklärung gekennzeichnetsafeist, muss die andere auch gekennzeichnetsafesein, um einen konsistenten Sicherheitsvertrag aufrechtzuerhalten.
Puffer fester Größe
- CS1641: Ein Pufferfeld mit fester Größe muss den Arraygrößenbezeichner nach dem Feldnamen aufweisen.
- CS1642: Pufferfelder mit fester Größe dürfen nur Elemente von Strukturen sein.
-
CS1663: Der Puffertyp für feste Größe muss eine der folgenden sein:
bool,byte,short,int,long,char,sbyte,ushort,uint,ulong,floatoderdouble - CS1664: Ein Pufferbereich fester Größe mit der Länge 'length' und dem Typ 'type' ist zu groß
- CS1665: Puffer mit fester Größe müssen eine Länge größer als 0 haben.
- CS1666: Sie können keine Puffer mit fester Größe verwenden, die in nicht behobenen Ausdrücken enthalten sind. Versuchen Sie, die feste Anweisung zu verwenden.
- CS1708: Auf Puffer mit fester Größe kann nur über Lokale oder Felder zugegriffen werden.
-
CS1716: Verwenden Sie nicht das Attribut "
System.Runtime.CompilerServices.FixedBuffer". Verwenden Sie stattdessen den Feldmodifizierer "fixed". - CS7092: Ein fester Puffer darf nur eine Dimension aufweisen.
-
CS8372: Verwenden Sie kein '
System.Runtime.CompilerServices.FixedBuffer' Attribut für eine Eigenschaft - CS9049: Ein festes Feld darf kein Verweisfeld sein.
Diese Fehler treten auf, wenn Sie mit Puffern mit fester Größe arbeiten. Puffer mit fester Größe sind Arrays, die direkt in Strukturen eingebettet sind und in erster Linie für Interoperabilitätsszenarien verwendet werden. Weitere Informationen finden Sie unter Puffer mit fester Größe.
So deklarieren und verwenden Sie Puffer mit fester Größe richtig:
- Geben Sie die Arraygröße nach dem Feldnamen mithilfe einer positiven ganzzahligen Konstante an (CS1641, CS1665). Die Gesamtgröße des Puffers (elementanzahl multipliziert mit Elementgröße) darf 2^31 Bytes (CS1664) nicht überschreiten.
- Deklarieren Sie Puffer mit fester Größe nur in Anweisungen, nicht in Klassen (CS1642). Verwenden Sie ein normales Array, wenn Sie das Feld in einer Klasse benötigen.
- Verwenden Sie einen der unterstützten Elementtypen:
bool, , ,byteshort,int,long, ,charsbyte,ushort, ,uintulong, , , oderfloatdouble(CS1663). - Verwenden Sie eine
fixedAnweisung, um die enthaltende Struktur anzuheften, bevor Sie auf den Puffer zugreifen (CS1666). - Zugriff auf Puffer mit fester Größe nur über Lokale oder Felder, nicht über Zwischenausdrücke (CS1708).
- Verwenden Sie den
fixedFeldmodifizierer anstelle desSystem.Runtime.CompilerServices.FixedBufferAttributs (CS1716). Wenden Sie dieses Attribut nicht auf Eigenschaften an (CS8372). - Deklarieren sie feste Puffer mit nur einer Dimension (CS7092). Mehrdimensionale feste Puffer werden nicht unterstützt.
- Deklarieren Sie puffer mit fester Größe nicht als
refFelder (CS9049). Puffer mit fester Größe müssen Wertfelder sein.
Funktionszeiger
- CS8812: Die Methoden-Gruppe 'method' kann nicht in den Nicht-Funktions-Zeigertyp 'type' umgewandelt werden.
Um einen Funktionszeiger abzurufen, verwenden Sie den address-of-Operator mit einer expliziten Typumwandlung für Funktionszeiger. Verwenden Sie den Adressoperator & nicht, um Methodengruppen void* oder andere Nicht-Funktionszeigertypen zuzuweisen. Weitere Informationen finden Sie unter Funktionszeiger.