Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Struct-medlemmen "struct2 field" av typen "struct1" orsakar en cykel i struct-layouten
Definitionerna av en eller flera structs innehåller rekursiva referenser som bildar en cykel. Den här begränsningen gäller endast för structs eftersom structs är värdetyper. Om du vill skapa rekursiva referenser deklarerar du dina typer som klasser, som är referenstyper.
Exempel 1
Följande exempel visar hur en självrefererande typ kan orsaka CS0523:
// CS0523.cs
// compile with: /target:library
struct SelfReferentialStruct
{
public SelfReferentialStruct other; // CS0523
}
class SelfReferentialClass
{
public SelfReferentialClass other; // OK
}
När en självrefererande structtyp skapas innehåller den en kopia av samma typ som en medlem. Men medlemmen har sedan en annan kopia, som fortsätter rekursivt. Som ett resultat av cykeln kan inte storleken på typen fastställas och CS0523 genereras.
Exempel 2
Följande exempel visar hur en typreferenscykel kan orsaka CS0523:
// CS0523b.cs
// compile with: /target:library
struct ReferenceCycleStruct1
{
public ReferenceCycleStruct2 other; // CS0523
}
struct ReferenceCycleStruct2
{
public ReferenceCycleStruct3 other; // CS0523
}
struct ReferenceCycleStruct3
{
public ReferenceCycleStruct1 other; // CS0523
}
För att lösa felen ovan kan du justera referenserna så att en cykel inte längre bildas eller konvertera minst en av structtyperna till en klass. På samma sätt som i föregående exempel ReferenceCycleStruct1 innehåller en ReferenceCycleStruct2, och som innehåller en ReferenceCycleStruct3, som så småningom innehåller ReferenceCycleStruct1 igen.