public struct MyStruct {
static MyStruct? myProperty;
}
尝试编译它会给我错误:
结构成员“myStruct.myProperty”导致结构布局中出现循环
。
据我所知,当结构的实例包含自己的结构作为属性(这对我来说很有意义)时,通常会发生此错误。
但在这里,它是关于 static 属性的,所以我看不出这样的递归是如何发生的。另外,该错误仅在声明 Nullable 结构时发生,声明静态非 nullable 是安全的。
这里到底发生了什么会导致循环?
编辑:
我确实找到了我应该重复的问题;它解释了为什么当 Instance 有自己类型的成员时会发生递归,但这里是关于静态成员的。
我从经验中知道 struct 可以有自己类型的 static 成员,不会在运行时中断,这个特定代码似乎只是中断,因为静态成员是 Nullable。
其次,很多人马上告诉我代码是为他们编译的; déjà-vu,我正在使用的 c#“版本”是针对 Unity 的,所以我认为这是他们编译器的另一个错误,我会向他们解决这个问题。
@Evk 指出这实际上是一个常见问题:
https://github.com/dotnet/roslyn/issues/10126
最佳答案
在寻找解决方法时,我发现了两件事:
第一,带有访问器的属性工作正常,所以在需要只读的地方你可以这样做:
public struct myStruct {
public static myStruct? myProperty { get{ /*...*/ } }
}
其次,只要它是嵌套的,您仍然可以将字段存储在结构中的某处:
public struct myStruct {
public static class nest {
public static Nullable<myStruct> myNestedProperty;
}
}
后者有点丑(幸运的是我不需要 setter),但至少这是一个可行的解决方法。
关于c# - 静态成员导致结构布局中的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47443178/