靜態建構函式中的異常

如果靜態建構函式丟擲異常,則永遠不會重試它。該型別在 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’的異常。

你可以看到實際的建構函式只執行一次,然後重用異常。