zoukankan      html  css  js  c++  java
  • 可遇不可求的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

  • 相关阅读:
    Leetcode 1489找到最小生成树李关键边和伪关键边
    Leetcode 113 路径总和 II
    hdu 1223 还是畅通工程
    hdu 1087 Super Jumping! Jumping! Jumping!
    hdu 1008 Elevator
    hdu 1037 Keep on Truckin'
    湖工oj 1241 畅通工程
    湖工oj 1162 大武汉局域网
    hdu 2057 A + B Again
    poj 2236 Wireless Network
  • 原文地址:https://www.cnblogs.com/tigerjacky/p/1858198.html
Copyright © 2011-2022 走看看