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

  • 相关阅读:
    [匈牙利算法] 洛谷 P1640 连续攻击
    [dfs] Jzoj P5916 flow
    [bfs] Jzoj P3522 迷宫花园
    [二分][状压dp] Jzoj P3521 道路覆盖
    [模拟] Jzoj P3520 原根
    [并查集] Jzoj P5914 盟主的忧虑
    [树上差分][子树求和][树形dp] Jzoj P5911 Travel
    [思维][暴力] Jzoj P5912 VanUSee
    [dfs][离散化] Jzoj P5910 DuLiu
    [cdq分治][树的重心] 洛谷 P3806 点分治1
  • 原文地址:https://www.cnblogs.com/tigerjacky/p/1858198.html
Copyright © 2011-2022 走看看