Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Struct member 'struct2 field' of type 'struct1' causes a cycle in the struct layout
The definitions of one or more structs include recursive references that form a cycle. This limitation only applies to structs, since structs are value types. To create recursive references, declare your types as classes, which are reference types.
The following sample shows how a self referential type can cause CS0523:
// CS0523.cs
// compile with: /target:library
struct SelfReferentialStruct
{
public SelfReferentialStruct other; // CS0523
}
class SelfReferentialClass
{
public SelfReferentialClass other; // OK
}
When a self referential struct type is made, it contains a copy of the same type as a member. However, that member then has another copy, which continues recursively. As a result of the cycle, the size of the type cannot be determined and CS0523 is emitted.
The following sample shows how a type reference cycle can cause 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
}
To resolve the errors above, you can adjust the references such that a cycle is no longer formed, or convert at least one of the struct types to a class. Similar to the previous example, ReferenceCycleStruct1
contains a ReferenceCycleStruct2
, and that contains a ReferenceCycleStruct3
, which eventually contains ReferenceCycleStruct1
again.
.NET feedback
.NET is an open source project. Select a link to provide feedback: