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.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour