CS0523 fordítási hiba

A "struct1" típusú struct2 tag "struct2 mező" ciklust okoz az struktúra elrendezésében

Egy vagy több szerkezet definíciója olyan rekurzív hivatkozásokat tartalmaz, amelyek ciklust alkotnak. Ez a korlátozás csak a szerkezetekre vonatkozik, mivel a szerkezetek értéktípusok. Rekurzív hivatkozások létrehozásához deklarálja a típusokat osztályként, amelyek referenciatípusok.

1. példa

Az alábbi minta bemutatja, hogy egy önhivatkozási típus hogyan okozhatJA a CS0523-at:

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

class SelfReferentialClass
{
    public SelfReferentialClass other;   // OK
}

Ha önhivatkozási struktúratípust hoz létre, az a tag típusával megegyező típusú példányt tartalmaz. Ennek a tagnak azonban van egy másik példánya, amely rekurzív módon folytatódik. A ciklus eredményeként a típus mérete nem határozható meg, és a CS0523 ki lesz bocsátva.

2. példa

Az alábbi minta bemutatja, hogy egy típushivatkozási ciklus hogyan okozhatJA a CS0523-at:

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

struct ReferenceCycleStruct2
{
    public ReferenceCycleStruct3 other;   // CS0523
}

struct ReferenceCycleStruct3
{
    public ReferenceCycleStruct1 other;   // CS0523
}

A fenti hibák megoldásához módosíthatja a hivatkozásokat úgy, hogy a ciklusok már nem alakulnak ki, vagy az egyik szerkezettípust osztálysá alakíthatja. Az előző példához ReferenceCycleStruct1 hasonlóan tartalmaz egy ReferenceCycleStruct2, és egy ReferenceCycleStruct3, amely végül újra tartalmaz ReferenceCycleStruct1 .