Erreur du compilateur CS0523

Le membre de struct 'struct2 field' de type 'struct1' génère un cycle dans la disposition du struct

Les définitions d’un ou de plusieurs structs comprennent des références récursives qui forment un cycle. Cette limitation s’applique uniquement aux structs, puisqu’ils sont des types de valeurs. Pour créer des références récursives, déclarez vos types comme des classes, qui sont des types référence.

Exemple 1

L’exemple suivant montre comment un type autoréférentiel peut provoquer l’erreur CS0523 :

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

class SelfReferentialClass
{
    public SelfReferentialClass other;   // OK
}

Quand un type de struct autoréférentiel est créé, il contient une copie du même type qu’un membre. Toutefois, ce membre a ensuite une autre copie qui continue de manière récursive. À l’issue du cycle, la taille du type ne peut pas être déterminée et l’erreur CS0523 est émise.

Exemple 2

L’exemple suivant montre comment un cycle de référence de type peut provoquer l’erreur 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
}

Pour résoudre les erreurs ci-dessus, vous pouvez ajuster les références de manière à ce qu’un cycle ne soit plus formé, ou convertissez au moins un des types de struct en classe. Comme dans l’exemple précédent, ReferenceCycleStruct1 contient un ReferenceCycleStruct2, lequel contient un ReferenceCycleStruct3, qui éventuellement contient ReferenceCycleStruct1 de nouveau.