具有部分类的静态字段初始化顺序

Alt*_* XL 7 .net c#

有没有办法强制部分类中的静态字段初始化顺序?让我们说在HelloWorld1.cs我有:

partial class HelloWorld
{
  static readonly string[] a = new[] { "Hello World" };
}
Run Code Online (Sandbox Code Playgroud)

在HelloWorld2.cs的其他地方,我有:

partial class HelloWorld
{
  static readonly string b = a[0];
}
Run Code Online (Sandbox Code Playgroud)

如果a在b之前初始化,那么这很好,但如果b在a之前被初始化则会抛出a.健康的方法可能是使用静态构造函数,但我很好奇当有类别在同一个分类的不同文件中时,是否有办法强制或预测初始化顺序.

Oti*_*iel 13

当字段存在于同一文件中时,文本顺序定义其初始化的执行:

10.5.5.1变量初始值设定项 - 静态字段初始化

类的静态字段变量初始值设定项对应于以它们出现在类声明中的文本顺序执行的赋值序列.如果类中存在静态构造函数(第10.12节),则在执行该静态构造函数之前立即执行静态字段初始值设定项.否则,静态字段初始化器在第一次使用该类的静态字段之前的实现相关时间执行.

但是,对于在部分类的不同文件中声明的字段,该顺序是未定义的:

10.2.6部分类型 - 成员

类型中成员的排序对C#代码来说很少有意义,但在与其他语言和环境交互时可能很重要.在这些情况下,未定义在多个部分中声明的类型内的成员的顺序.

来自C#语言规范.