Fehler und Warnungen im Zusammenhang mit Verweisparametern, Variablen und Rückgaben
Die folgenden Fehler können generiert werden, wenn Sie mit Verweisvariablen arbeiten:
- CS0192: Ein
readonly
-Feld kann nicht als einref
- oderout
-Wert verwendet werden (außer in einem Konstruktor) - CS0199: Ein
static readonly
-Feld kann nicht als einref
- oderout
-Wert verwendet werden (außer in einem statischen Konstruktor) - CS0206: Eine Eigenschaft oder ein Indexer, der nichts zurückgibt, kann nicht als ein
out
- oderref
-Wert verwendet werden - CS0631:
ref
undout
sind in diesem Kontext ungültig - CS0767: Eine Schnittstelle mit den angegebenen Typparametern kann nicht geerbt werden, da die Methode Überladungen enthält, die sich nur bei
ref
undout
unterscheiden - CS1510: Ein
ref
- oderout
-Wert muss eine zuzuweisende Variable sein - CS1605: Variable kann nicht als
ref
- oderout
-Wert verwendet werden, da sie schreibgeschützt ist - CS1623: Iteratoren können nicht
ref
-,in
- oderout
-Parameter haben - CS1649: Elemente eines
readonly
-Felds können nicht als einref
- oderout
-Wert verwendet werden (außer in einem Konstruktor) - CS1651: Felder eines statischen schreibgeschützten Felds können nicht als
ref
- oderout
-Wert verwendet werden (außer in einem statischen Konstruktor) - CS1655: Felder vom Typ können nicht als
ref
- oderout
-Wert verwendet werden - CS1657: Variable kann nicht als
ref
- oderout
-Wert verwendet werden - CS1741: Ein
ref
- oderout
-Parameter darf keinen Standardwert haben - CS1939: Die Bereichsvariable kann nicht als
out
oderref
-Parameter übergeben werden - CS1988: Async-Methoden können keine
ref
-,in
- oderout
-Parameter haben - CS7084: Ein Windows-Runtime-Ereignis wird möglicherweise nicht als
out
- oderref
-Parameter übergeben. - CS8166: Kann einen Parameter nicht durch Verweis zurückgeben, da es sich nicht um einen
ref
-Parameter handelt - CS8167: Kann nicht zurückgegeben werden, indem auf ein Element des Parameters verwiesen wird, da es sich nicht um einen
ref
- oderout
-Parameter handelt - CS8168: Kann nicht lokal durch Verweis zurückgegeben werden, da es sich nicht um einen lokalen Verweis handelt
- CS8169: Kann ein Element der lokalen Variablen nicht durch Verweis zurückgeben, da es sich nicht um einen lokalen Verweis handelt
- CS8196: Ein Verweis auf eine implizit typisierte out-Variable ist in der gleichen Argumentliste unzulässig.
- CS8325: '
await
' kann nicht in einem Ausdruck verwendet werden, der einenref
bedingten Operator enthält - CS8326: Entweder müssen beide Bedingungsoperatorwerte Bezugswerte sein, oder keiner von beiden
- CS8327: Der Ausdruck muss vom richtigen Typ sein, um dem alternativen Bezugswert zu entsprechen
- CS8329: Variable kann nicht als
ref
- oderout
-Wert verwendet werden, da es sich um eine schreibgeschützte Variable handelt - CS8330: Elemente der Variablen können nicht als
ref
- oderout
-Wert verwendet werden, da es sich um schreibgeschützte Variablen handelt - CS8331: Kann Variablen nicht zuweisen oder als rechte Seite einer
ref
-Zuordnung verwenden, da es sich um schreibgeschützte Variablen handelt - CS8332: Kann einem Element der Variablen nicht zugewiesen oder als rechte Seite einer
ref
-Zuordnung verwendet werden, da es sich um eine schreibgeschützte Variable handelt - CS8337: Der erste Parameter einer Erweiterungsmethode „
ref
“ muss ein Werttyp oder ein generischer Typ sein, der auf eine Struktur beschränkt ist. - CS8338: Der erste „
in
“- oder „ref readonly
“-Parameter der Erweiterungsmethode muss ein konkreter (nicht generischer) Werttyp sein. - CS8351: Verzweigungen eines
ref
bedingten Operators können nicht auf Variablen mit inkompatiblen Deklarationsbereichen verweisen - CS8373: Die linke Seite einer
ref
-Zuordnung muss eine Verweisvariable sein. - CS8374: Die Quelle für die Zuweisung kann nicht über einen schmaleren Escapebereich als das Ziel verfügen.
- CS8388: Eine
out
-Variable kann nicht als lokaler Verweis deklariert werden - CS8977: Kann nicht „
ref
“, „in
“ oder „out
“ in der Signatur einer Methode verwenden, die mit „UnmanagedCallersOnly“ zugeschrieben wird. - CS9072: Eine Dekonstruktionsvariable kann nicht als lokaler Verweis deklariert werden
- CS9077: Kann einen Parameter nicht durch Verweis über einen
ref
-Parameter zurückgeben. Er kann nur in einer Rückgabe-Anweisung zurückgegeben werden - CS9078: Kann nicht zurückgegeben werden, indem auf ein Element des Parameters über einen
ref
-Parameter verwiesen wird. Er kann nur in einer Rückgabe-Anweisung zurückgegeben werden - CS9079: Kann keine Zuweisung durchführen, da die Quelle der aktuellen Methode nur über eine Rückgabe-Anweisung escapen kann.
- CS9096: Die Zuweisung kann nicht zurückgestellt werden, da die Quelle einen breiteren Wertescapebereich aufweist als das Ziel, sodass die Zuordnung über die Quelle von Werten mit schmaleren Escapebereichen als das Ziel zulässig ist.
- CS9101: UnscopedRefAttribute kann nur auf Strukturinstanzmethoden und -eigenschaften oder Methoden und Eigenschaften der virtuellen Schnittstelleninstanz angewendet werden und kann nicht auf Konstruktoren oder init-only-Member angewendet werden.
- CS9102: UnscopedRefAttribute kann nicht auf eine Schnittstellenimplementierung angewendet werden, da das implementierte Element nicht über dieses Attribut verfügt.
- CS9104: Eine
using
-Anweisungsressource vom Typ kann nicht in asynchronen Methoden oder asynchronen Lambda-Ausdrücken verwendet werden. - CS9190:
readonly
-Modifizierer muss nachref
angegeben werden. - CS9199: Ein
ref readonly
-Parameter darf nicht über das Attribut „Out“ verfügen.
Die folgenden Warnungen werden generiert, wenn Verweisvariablen falsch verwendet werden:
- CS9085: Dieser Verweis ordnet die Variable zu, aber das Ziel hat einen schmaleren Escapebereich als die Quelle.
- CS9086: Verzweigungen eines
ref
bedingten Operators können nicht auf Variablen mit inkompatiblen Deklarationsbereichen verweisen - CS9087: Gibt einen Parameter nach Verweis zurück, ist aber kein
ref
-Parameter - CS9089: Gibt durch Verweis ein Element des Parameters zurück, das kein
ref
- oderout
-Parameter ist - CS9091: Gibt lokal durch Verweis zurück, es handelt sich jedoch nicht um eine lokale Verweisvariable
- CS9092: Gibt einen Member der lokalen Variablen als Verweis zurück, es handelt sich jedoch nicht um eine lokale Verweisvariable
- CS9093: Dieser Verweis ordnet zu, aber die Quelle kann der aktuellen Methode nur über eine Rückgabe-Anweisung escapen.
- CS9094: Gibt einen Parameter durch Verweis über einen
ref
-Parameter zurück. Er kann jedoch nur sicher in einer Rückgabe-Anweisung zurückgegeben werden - CS9095: Dieser Wert wird durch Verweis auf ein Element des Parameters über einen
ref
-Parameter zurückgegeben. Er kann jedoch nur sicher in einer Rückgabe-Anweisung zurückgegeben werden - CS9097: Dieser Verweis ordnet zu, aber die Quelle weist einen breiteren Wert-Escapebereich auf als das Ziel, sodass die Zuordnung über das Ziel von Werten mit schmaleren Escapebereichen als die Quelle möglich ist.
- CS9191: Der
ref
-Modifizierer für das Argument, das demin
-Parameter entspricht, entsprichtin
. Erwägen Sie stattdessenin
zu verwenden. - CS9192: Das Argument sollte mit dem
ref
- oderin
-Schlüsselwort übergeben werden. - CS9193: Das Argument sollte eine Variable sein, da es an einen
ref readonly
-Parameter übergeben wird - CS9195: Das Argument sollte mit dem
in
-Schlüsselwort übergeben werden - CS9196: Der Verweistypmodifizierer des Parameters stimmt nicht mit dem entsprechenden Parameter im außerkraftsetzungs- oder implementierten Element überein.
- CS9197: Der Verweistypmodifizierer des Parameters stimmt nicht mit dem entsprechenden Parameter im ausgeblendeten Element überein.
- CS9198: Der Verweistypmodifizierer des Parameters stimmt nicht mit dem entsprechenden Parameter im Ziel überein.
- CS9200: Für
ref readonly
-Parameter wird ein Standardwert angegeben,ref readonly
sollte jedoch nur für Verweise verwendet werden. Erwägen Sie das Deklarieren des Parameters alsin
. - CS9201: Das Verweisfeld sollte vor der Verwendung des Verweises zugeordnet werden.
Diese Fehler und Warnungen folgen den folgenden Designs:
- Falsche Syntax: Die Syntax Ihrer Deklaration oder deren Verwendung ist ungültig.
- Sprachkonstrukte, bei denen
ref
-Variablen ungültig sind: Einige C#-Idiome lassen keine Variablen zu. Dies liegt in der Regel daran, dass die Verweissicherheitsanalyse nicht zuverlässig durchgeführt werden kann. - Wertausdruck, der verwendet wird, wenn eine Bezugsvariable erforderlich ist: Der Ausdruck, der als Verweisvariable verwendet wird, muss eine Variable und kein Wertausdruck sein.
- Schreibbare Verweisvariablen, die auf schreibgeschützte Variablen verweisen: Ein Verweis auf eine schreibgeschützte Variable kann nicht durch schreibbaree Verweise übergeben werden.
- Verletzungen der Bezugssicherheit: Eine Verweisvariable kann nicht auf eine Variable verweisen, die einen schmaleren Kontext aufweist. Dies würde bedeuten, dass die Verweisvariable auf ungültigen Speicher verweisen könnte.
In diesem Artikel wird der Begriff Verweisvariable als allgemeiner Begriff verwendet für einen Parameter mit einem der in
-, ref readonly
-, ref
- oder out
-Modifizierer oder einer ref
lokalen Variablen, einem ref
-Feld in einer ref struct
oder einer ref
-Rückgabe. Eine Verweisvariable bezieht sich auf eine andere Variable, die als Referent bezeichnet wird.
Falsche Syntax
Diese Fehler deuten darauf hin, dass Sie in Bezug auf Verweisvariablen falsche Syntax verwenden:
- CS8373: Die linke Seite einer
ref
-Zuordnung muss eine Verweisvariable sein. - CS8388-: Eine
out
-Variable kann nicht als lokaler Verweis deklariert werden. - CS9190:
readonly
-Modifizierer muss nachref
angegeben werden.
Sie können den Fehler mit einer der folgenden Änderungen beheben:
- Der linke Operand eines
= ref
-Operators muss eine Verweisvariable sein. Weitere Informationen zur richtigen Syntax finden Sie unter Verweisvariablen. - Der Parametermodifizierer
ref readonly
muss in dieser Reihenfolge sein.readonly ref
ist kein zulässiger Parametermodifizierer. Wechseln Sie die Reihenfolge der Wörter. - Eine lokale Variable kann nicht als
out
deklariert werden. Um eine lokale Verweisvariable zu deklarieren, verwenden Sieref
.
Verweisvariableneinschränkungen
Die folgenden Fehler deuten darauf hin, dass eine Verweisvariable nicht verwendet werden kann, wenn Sie über eine Variable verfügen:
- CS0631:
ref
undout
sind in diesem Kontext ungültig - CS0767: Schnittstelle mit den angegebenen Typparametern kann nicht geerbt werden, da die Methode Überladungen enthält, die sich nur bei
ref
undout
unterscheiden - CS1623: Iteratoren können nicht über
ref
-,in
- oderout
-Parameter verfügen - CS1741-: Ein
ref
- oderout
-Parameter darf keinen Standardwert haben - CS1939: Die Bereichsvariable kann nicht als
out
oderref
-Parameter übergeben werden - CS1988: Async-Methoden können keine
ref
-,in
- oderout
-Parameter haben - CS7084: Ein Windows-Runtime-Ereignis wird möglicherweise nicht als
out
- oderref
-Parameter übergeben. - CS8196: Ein Verweis auf eine implizit typisierte out-Variable
out
ist in der gleichen Argumentliste unzulässig. - CS8325-: „await“ kann nicht in einem Ausdruck verwendet werden, der einen
ref
bedingten Operator enthält - CS8326: Entweder müssen beide Bedingungsoperatorwerte Bezugswerte sein, oder keiner von beiden
- CS8327: Der Ausdruck muss vom richtigen Typ sein, um dem alternativen Bezugswert zu entsprechen
- CS8337: Der erste Parameter einer Erweiterungsmethode „
ref
“ muss ein Werttyp oder ein generischer Typ sein, der auf eine Struktur beschränkt ist. - CS8338: Der erste „
in
“- oder „ref readonly
“-Parameter der Erweiterungsmethode muss ein konkreter (nicht generischer) Werttyp sein. - CS8977: Kann nicht „
ref
“, „in
“ oder „out
“ in der Signatur einer Methode verwenden, die mit „UnmanagedCallersOnly“ zugeschrieben wird. - CS9072: Eine Dekonstruktionsvariable kann nicht als lokaler Verweis deklariert werden
- CS9104: Eine
using
-Anweisungsressource vom Typ kann nicht in asynchronen Methoden oder asynchronen Lambda-Ausdrücken verwendet werden. - CS9199: Ein
ref readonly
-Parameter darf nicht das Attribut „Out“ aufweisen.
Die folgenden Warnungen deuten darauf hin, dass eine Verweisvariable nicht verwendet werden sollte und möglicherweise unsicher ist:
- CS9196: Der Verweistypmodifizierer des Parameters stimmt nicht mit dem entsprechenden Parameter im außerkraftsetzungs- oder implementierten Element überein.
- CS9197: Der Verweistypmodifizierer des Parameters stimmt nicht mit dem entsprechenden Parameter im ausgeblendeten Element überein.
- CS9198: Der Verweistypmodifizierer des Parameters stimmt nicht mit dem entsprechenden Parameter im Ziel überein.
- CS9200: Für
ref readonly
-Parameter wird ein Standardwert angegeben,ref readonly
sollte jedoch nur für Verweise verwendet werden. Erwägen Sie das Deklarieren des Parameters alsin
. - CS9201: Verweisfeld sollte vor der Verwendung des Verweises zugewiesen werden.
Um den Fehler zu beheben, entfernen Sie die Verweisvariable, wo sie nicht zulässig ist:
- Entfernen Sie
in
-,ref
- undout
-Parameter aus Indexern, Iteratoren und asynchronen Methoden. - Entfernen Sie bedingte Verweisausdrücke (
? :
), die await enthalten. - Entfernen Sie den
ref
-Modifizierer aus dem ersten Parameter einer Erweiterungsmethode, bei der dieser Typ kein Werttyp oder ein generischer Typ ist, der als Werttyp eingeschränkt ist. - Beide oder keine der [Bedingungsoperatorausdrücke] müssen
ref
-Variablen sein. Entfernen Sie entwederref
aus einem Ausdruck, oder fügen Sie ihn dem anderen hinzu. Wenn es sich um einenref
bedingten Ausdruck handelt, müssen beide Ausdrücke denselben Typ aufweisen. ref
- undout
-Parameter können keine Standardwerte aufweisen. Entfernen Sie entweder denref
- oderout
-Modifizierer oder entfernen Sie den Standardwert.- Eine implizit eingegebene
out
-Variablendeklaration darf auch nicht an anderer Stelle in derselben Argumentliste vorhanden sein. - Sie können keine Verweisvariablen in einer
using
-Anweisung in Lambda-Ausdrücken vonasync
-Methoden einfügen. - Die Bereichsvariable in einem LINQ-Abfrageausdruck kann nicht per Verweis übergeben werden.
- Sie können ein Objekt nicht in Verweisvariablen dekonstruieren. Ersetzen Sie die Verweisvariablen durch Wertvariablen.
- Sie können nicht mehrere Schnittstellen implementieren, bei denen sich Methodenüberladungen nur bei
ref
undout
unterscheiden. Beispielsweise deklariertvoid M(ref int i)
eine Schnittstelle und eine andere Schnittstelle deklariertvoid M(out int i)
. Eine Klasse kann nicht beide Schnittstellen implementieren, da die Methoden nicht voneinander unterschieden werden können. Sie können nur eine dieser Schnittstellen implementieren. - Methoden, die mit System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute zugeschrieben werden, können keine Verweisparameter verwenden.
- Ein Windows-Runtime-Ereignis kann nicht als Verweisvariable übergeben werden.
- Ein
ref readonly
-Parameter kann nicht auf System.Runtime.InteropServices.OutAttribute in der Remoting-API angewendet werden.
unscoped ref
-Beschränkungen
Der unscoped
-Qualifizierer für ref
-Parameter ist an einigen Stellen nicht zulässig:
- CS9101: UnscopedRefAttribute kann nur auf Strukturinstanzmethoden und -eigenschaften oder Methoden und Eigenschaften der virtuellen Schnittstellen angewendet werden und kann nicht auf Konstruktoren oder init-only-Member angewendet werden.
- CS9102: UnscopedRefAttribute kann nicht auf eine Schnittstellenimplementierung angewendet werden, da das implementierte Element nicht über dieses Attribut verfügt.
Sie müssen den unscoped
-Modifizierer für die Parameterdeklaration entfernen, die den Fehler verursacht hat.
Verweisvariablen erfordern einen Referent
Sie müssen eine Variable als Argument für einen Verweisparameter, einen Verweisrücklauf oder eine lokale Verweiszuweisung angeben:
- CS0206: Eine Eigenschaft oder Indexierung, die nichts zurückgibt, wird möglicherweise nicht als
out
- oderref
-Wert verwendet - CS1510: Ein
ref
- oderout
-Wert muss eine zuzuweisbare Variable sein
Warnungen:
- CS9191: Der
ref
-Modifizierer für das Argument, das demin
-Parameter entspricht, entsprichtin
. Erwägen Sie stattdessen die Verwendung vonin
. - CS9192: Das Argument sollte mit dem
ref
- oderin
-Schlüsselwort übergeben werden. - CS9193: Das Argument sollte eine Variable sein, da es an einen
ref readonly
-Parameter übergeben wird - CS9195: Das Argument sollte mit dem
in
-Schlüsselwort übergeben werden
Der Compiler gibt diese Fehler aus, wenn Sie einen Ausdruck verwenden, der einen Wert berechnet, in dem eine Variable verwendet werden muss. Sie müssen das Ergebnis dieses Ausdrucks in einer Variablen speichern, um ihn zu verwenden. Eigenschaften und Indexierungen geben z. B. Werte zurück, nicht Variablen. Sie müssen das Ergebnis in einer Variablen speichern und einen Verweis auf diese Variable übergeben.
Schreibbare Verweisvariablen erfordern einen beschreibbaren Referent
Eine schreibbare Verweisvariable erfordert, dass der Referent auch schreibbar ist. Die folgenden Fehler deuten darauf hin, dass die Variable nicht schreibbar ist:
- CS0192: Ein
readonly
-Feld kann nicht als einref
- oderout
-Wert verwendet werden (außer in einem Konstruktor) - CS0199: Ein
static readonly
-Feld kann nicht als einref
- oderout
-Wert verwendet werden (außer in einem statischen Konstruktor) - CS1605: Die Variable kann nicht als
ref
- oderout
-Wert verwendet werden, da sie schreibgeschützt ist - CS1649: Elemente eines
readonly
-Felds können nicht alsref
- oderout
-Wert verwendet werden (außer in einem Konstruktor) - CS1651: Felder eines
static readonly
-Felds können nicht alsref
- oderout
-Wert verwendet werden (außer in einem statischen Konstruktor) - CS1655: Felder vom Typ können nicht als
ref
- oderout
-Wert verwendet werden - CS1657: Die Variable kann nicht als
ref
- oderout
-Wert verwendet werden - CS8329: Variable kann nicht als
ref
- oderout
-Wert verwendet werden, da es sich um eine schreibgeschützte Variable handelt - CS8330: Elemente der Variablen können nicht als
ref
- oderout
-Wert verwendet werden, da es sich um schreibgeschützte Variablen handelt - CS8331: Kann Variablen nicht zuweisen oder als rechte Seite einer
ref
-Zuordnung verwenden, da es sich um schreibgeschützte Variablen handelt - CS8332: Kann einem Element der Variablen nicht zugewiesen oder als rechte Seite einer
ref
-Zuordnung verwendet werden, da es sich um eine schreibgeschützte Variable handelt
Beispiele für Variablen, die nicht schreibbar sind, sind:
- schreibgeschützte Felder, sowohl Instanz- als auch statische Felder.
- Elemente von
readonly
-Feldern. - Die
this
-Variable. - Die foreach-Iterationsvariable
- Eine using-Variable oder eine fixed-Variable.
Sie müssen den Wert kopieren und einen Verweis auf die Kopie übergeben.
Verstöße gegen die Verweissicherheit
Der Compiler verfolgt den sicheren Kontext von Referenten und Verweisvariablen. Der Compiler gibt Fehler oder Warnungen in unsicherem Code aus, wenn eine Verweisvariable auf eine nicht mehr gültige Referentvariable verweist. Der Referent muss über einen sicheren Kontext verfügen, der mindestens so breit wie der verweissichere Kontext der Verweisvariablen ist. Ein Verstoß gegen diese Sicherheitsüberprüfungen bedeutet, dass die Verweisvariable auf zufälligen Speicher zugreift, anstatt auf die Referentvariable.
- CS8166-: Kann einen Parameter nicht durch Verweis zurückgeben, da es sich nicht um einen
ref
-Parameter handelt - CS8167: Kann nicht zurückgegeben werden, indem auf ein Element des Parameters verwiesen wird, da es sich nicht um einen
ref
- oderout
-Parameter handelt - CS8168: Kann nicht lokal durch Verweis zurückgegeben werden, da es sich nicht um einen lokalen Verweis handelt
- CS8169: Kann ein Element der lokalen Variablen nicht durch Verweis zurückgeben, da es sich nicht um einen lokalen Verweis handelt
- CS8345: Feld- oder automatisch implementierte Eigenschaft darf nicht vom Typ sein, es sei denn, es handelt sich um ein Instanzmember einer
ref struct
. - CS8351: Verzweigungen eines
ref
bedingten Operators können nicht auf Variablen mit inkompatiblen Deklarationsbereichen verweisen - CS8374: Die Quelle für die Zuweisung kann nicht über einen schmaleren Escapebereich als das Ziel verfügen.
- CS9077: Kann einen Parameter nicht durch Verweis über einen
ref
-Parameter zurückgeben. Er kann nur in einer Rückgabe-Anweisung zurückgegeben werden - CS9078: Kann nicht zurückgegeben werden, indem auf ein Element des Parameters über einen
ref
-Parameter verwiesen wird, es kann nur in einer Rückgabe-Anweisung zurückgegeben werden - CS9079: Die Quelle kann dem Ziel nicht zugewiesen werden, da die Quelle nur der aktuellen Methode über eine Rückgabe-Anweisung escapen kann.
- CS9096: Kann die Quelle nicht dem Ziel zuweisen, da die Quelle einen breiteren Wert-Escapebereich hat als das Ziel, was die Zuweisung über Zielwerte mit schmaleren Escapebereichen als Quelle zulässt.
Warnungen:
- CS9085: Dieser Verweis ordnet der Zielquelle eine Quelle zu, die Quelle ordnet jedoch einen schmaleren Escapebereich als das Ziel auf.
- CS9086: Die Verzweigungen des bedingten Verweisoperators beziehen sich auf Variablen mit inkompatiblen Deklarationsbereichen
- CS9087: Gibt Parameter durch Verweis zurück, ist aber kein
ref
-Parameter - CS9089: Gibt durch Verweis ein Element des Parameters zurück, das kein
ref
- oderout
-Parameter ist - CS9091: Gibt lokal durch Verweis zurück, es handelt sich jedoch nicht um eine lokale Verweisvariable
- CS9092: Gibt einen Member der lokalen Variablen als Verweis zurück, es handelt sich jedoch nicht um eine lokale Verweisvariable
- CS9093: Dieser Verweis weist die Quelle dem Ziel zu, aber die Quelle kann der aktuellen Methode nur über eine Rückgabe-Anweisung escapen.
- CS9094: Gibt einen Parameter durch Verweis über einen
ref
-Parameter zurück. Er kann jedoch nur sicher in einer Rückgabe-Anweisung zurückgegeben werden - CS9095: Dieser Wert wird durch Verweis auf ein Element des Parameters über einen
ref
-Parameter zurückgegeben. Er kann jedoch nur sicher in einer Rückgabe-Anweisung zurückgegeben werden - CS9097: Dieser Verweis weist die Quelle dem Ziel zu, aber die Quelle hat einen breiteren Wert-Escapebereich als das Ziel, was die Zuordnung über das Ziel von Werten mit schmaleren Escapebereichen als die Quelle zulässt.
Der Compiler verwendet statische Analysen, um festzustellen, ob der Referent an allen Punkten gültig ist, an denen die Verweisvariable verwendet werden kann. Sie müssen Code umgestalten, damit der Referent an allen Stellen gültig bleibt, an denen sich die Verweisvariable möglicherweise darauf beziehen kann. Ausführliche Informationen zu den Regeln für die Verweissicherheit finden Sie im C#-Standard für verweissichere Kontexte.