可遇不可求的Question之类型初始值设定项引发异常篇

总结在前头:

“频繁”引发此类异常一般是由于静态方法初始化失败导致的,可以查找代码中的"一次性静态"初始化方法着手排查问题。迅速解决此类异常,可以直接让程序重新初始化,即尝试重启程序。

TypeInitializationExeption在MSND中的描述为:当类初始值设定项不能初始化类型时,将创建 TypeInitializationException 并向其传递由该类型的类初始值设定项引发的异常引用。

我们知道,类型初始化或者访问类型的静态成员时,都会对类中的其他静态成员进行初始化,并执行静态构造函数(如果有的话)。在这些过程中如果任一环节出现例如下面的代码:


    class ClassHelper
    {
        
public static string Field = Do("Initial the static field");
        
public static string StaticString = "Initaial static string";
        
public string NonStaticString = "Initial non static string";
        
public ClassHelper()
        {
            NonStaticString 
= "Change non static string in instance constructor";
            StaticString 
= "Change static string in instance constructor";
        }
        
public static string Do(string field)
        {
            Console.WriteLine(field);
            
throw new Exception();
            
return field;
        }
    }

    

那么产生TypeInitializationException的情况就包含以下几种:

1. 访问类的某一静态成员,而其他静态成员的初始化(或静态构造函数中)产生异常。例如访问ClassHelper.StaticString,由于静态成员Field的初始化产生异常,因此调用ClassHelper.StaticString会抛出TypeInitializationException。

2. 访问类的某一静态成员,该静态成员的初始化(或静态构造函数中)产生异常。例如访问ClassHelper.Field。

3. 对该类进行初始化,而类中的某个静态成员初始化(或静态构造函数中)产生异常。例如ClassHelper helper = new ClassHelper()。

请参考:http://www.cnblogs.com/kirinboy/archive/2007/11/07/951903.html

原文地址:https://www.cnblogs.com/tigerjacky/p/1858198.html