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