Share via


Compilerfehler CS0523

Der Strukturmember „Struktur2-Feld“ vom Typ „Struktur1“ verursacht eine Schleife im Strukturlayout.

Die Definitionen einer oder mehrerer Strukturen umfassen rekursive Bezüge, die einen Zyklus bilden. Diese Einschränkung gilt nur für Strukturen, da diese Werttypen sind. Um rekursive Verweise zu erstellen, deklarieren Sie Die Typen als Klassen, die Referenztypen sind.

Beispiel 1

Das folgende Beispiel zeigt, wie ein selbstreferentieller Typ CS0523 verursachen kann:

// CS0523.cs
// compile with: /target:library
struct SelfReferentialStruct
{
    public SelfReferentialStruct other;   // CS0523
}

class SelfReferentialClass
{
    public SelfReferentialClass other;   // OK
}

Wenn ein selbstreferentieller Strukturtyp erstellt wird, enthält er eine Kopie desselben Typs wie ein Element. Dieser Member verfügt dann jedoch über eine weitere Kopie, die rekursiv fortgesetzt wird. Als Ergebnis des Zyklus kann die Größe des Typs nicht bestimmt werden, und CS0523 wird ausgegeben.

Beispiel 2

Das folgende Beispiel zeigt, wie ein Typverweiszyklus CS0523 verursachen kann:

// CS0523b.cs
// compile with: /target:library
struct ReferenceCycleStruct1
{
    public ReferenceCycleStruct2 other;   // CS0523
}

struct ReferenceCycleStruct2
{
    public ReferenceCycleStruct3 other;   // CS0523
}

struct ReferenceCycleStruct3
{
    public ReferenceCycleStruct1 other;   // CS0523
}

Um die oben genannten Fehler zu beheben, können Sie die Bezüge so anpassen, dass kein Zyklus mehr gebildet wird, oder mindestens einen der Strukturtypen in eine Klasse konvertieren. Ähnlich wie im vorherigen Beispiel ReferenceCycleStruct1 enthält sie ein ReferenceCycleStruct2, und das eine ReferenceCycleStruct3, die schließlich wieder enthält ReferenceCycleStruct1 .