public struct MyStruct {
static MyStruct? myProperty;
}
尝试编译它会给我错误:
Struct member 'myStruct.myProperty' causes a cycle in the struct layout
。
从我收集的内容中,当结构的实例包含自己的结构作为属性时(这对我来说很有意义),通常会发生此错误。
但在这里,它是关于静态属性,所以我不知道这样的递归是如何发生的。另外,只有在声明Nullable结构时才会发生错误,声明静态非可空是安全的。
这里究竟发生了什么会导致一个循环?
修改
我确实发现了我认为是重复的问题;它解释了当 Instance 具有自己类型的成员时发生递归的原因,但这是关于静态成员的。
我从经验中知道struct可以拥有自己类型的 static 成员,这些成员在运行时不会中断,这个特定的代码似乎只是因为静态成员是Nullable而中断。
其次,多个人马上告诉我代码为他们编译;似曾相识,我正在使用的c#的“版本”是针对Unity的,所以我认为这是他们编译器的另一个错误,我会向他们提出这个问题。
@Evk指出这实际上是一个常见问题:
https://github.com/dotnet/roslyn/issues/10126
答案 0 :(得分:1)
在寻找解决方法时,我发现了两件事:
其中一个,带访问器的属性工作正常,所以只要需要Readonly,你就可以这样做:
public struct myStruct {
public static myStruct? myProperty { get{ /*...*/ } }
}
其次,只要它嵌套在一起,你仍然可以在结构中的某个地方存储一个字段:
public struct myStruct {
public static class nest {
public static Nullable<myStruct> myNestedProperty;
}
}
后者有点难看,(幸运的是我不需要制定者),但至少这是一个有效的解决方法。