静态构造函数中的异常
如果静态构造函数抛出异常,则永远不会重试它。该类型在 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’的异常。
你可以看到实际的构造函数只执行一次,然后重用异常。