静态构造函数中的异常

如果静态构造函数抛出异常,则永远不会重试它。该类型在 AppDomain 的生命周期内不可用。该类型的任何进一步使用将引发围绕原始异常的 TypeInitializationException

public class Animal
{
    static Animal()
    {
        Console.WriteLine("Static ctor");
        throw new Exception();
    }

    public static void Yawn() {}
}

try
{
    Animal.Yawn();
}
catch (Exception e)
{
    Console.WriteLine(e.ToString());
}

try
{
    Animal.Yawn();
}
catch (Exception e)
{
    Console.WriteLine(e.ToString());
}

这将输出:

静态 ctor

System.TypeInitializationException:‘Animal’的类型初始值设定项引发了异常。 —> System.Exception:抛出了类型’System.Exception’的异常。

[…]

System.TypeInitializationException:‘Animal’的类型初始值设定项引发了异常。 —> System.Exception:抛出了类型’System.Exception’的异常。

你可以看到实际的构造函数只执行一次,然后重用异常。