创建一个控制台应用以重现:
struct Test
{
public static readonly Test? Null = null;
}
class Program
{
static void Main(string[] args)
{
var t = Test.Null;
}
}
它是可编译的,但我们将在运行时具有以下内容:
mscorlib.dll中发生了未处理的“System.TypeLoadException”类型异常。附加信息:无法从程序集“ConsoleApplication17,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”加载“ConsoleApplication17.Test”类型。
这种方法解决了这个问题:
struct Test
{
public static Test? Null => null;
}
答案 0 :(得分:17)
这是CoreCLR中已知的实现限制 - 实例和静态字段布局一起完成,导致此错误。这很难修复。
来源:Static fields should not contribute to cyclic struct layout #4049