如何在Main()方法之前在C#中运行静态初始化方法?

给定一个带有初始化方法的静态类:

public static class Foo { // Class members... internal static init() { // Do some initialization... } } 

如何确保在Main()之前运行初始化程序?

我能想到的最好的是将它添加到Foo

  private class Initializer { private static bool isDone = false; public Initializer() { if (!isDone) { init(); isDone = true; } } } private static readonly Initializer initializer = new Initializer(); 

这有用还是有一些不可预见的警告? 还有更好的方法吗?

只需在Foo的静态构造函数中进行初始化。

从文档:

在创建第一个实例或引用任何静态成员之前,会自动调用静态构造函数来初始化类。

您可以使用C#中的静态构造函数 。

 public static class Foo { // Class members... static Foo(){ init(); // other stuff } internal static init() { // Do some initialization... } } 

将代码从internal static方法移动到static构造函数,如下所示:

 public static class Foo { // Class members... static Foo() { // Do some initialization... } } 

这样你就可以确定静态构造函数将在第一次提到你的Foo类时运行,无论是构造实例还是访问静态成员。