-上午打开VS编译程序的时候,突然出现了这个运行时错误“类型初始值设定项引发异常”。昨天还没有这个错误呢,今天就突然出现,搞得我一头雾水。上网搜了一下,发现有很多人遇到了这个问题。经过一番折腾解决了这个问题后,发现很多人都没有意识到其症结所在,于是写这个随笔,给大家点启发,也给自己做个备忘。
症状描述:
我的程序需要连接一台MQ服务器(其实就是个台式机,每天下班关机),如果服务器没有开,程序就会抛出异常。以前编译时老是忘开服务器,经常会出现MQ访问失败的异常。这次我原本以为也是这个异常,没想到出来的是“类型初始值设定项引发异常”。
今天的错误为什么会和以往不一样呢?昨天临下班时,把一个类的单件模式做了重构,使用了静态初始化方法。代码如下:

private static readonly WorkerManager instance = new WorkerManager();
static WorkerManager() { }
private WorkerManager()
{
    Initialize();
}
public static WorkerManager Instance
{
get { return instance; }
}

访问MQ的语句在Initialize方法里,问题就应该出现在这里了。
解决方法:
当然,把MQ服务器打开问题就解决了,但是究竟为什么会出现“类型初始值设定项引发异常” 呢?
原来类的静态成员在初始化时如果出现异常,访问类的其它静态成员或对该类进行初始化都会抛出这个异常。请看下面的代码:

public class Test
{
public static Foo Test1 = new Foo();
public static string Test2 = "Test2";
public string Test3 = "Test3";
public Test() { }
    }

public class Foo
{
public Foo()
{
throw new Exception();
        }
    }

在访问Test.Test2以及new Test()时都会抛出这个异常。我的代码中,由于Initialize()出现异常,instance实例化失败,所以访问Instance时就抛出了这个异常。
总结:

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

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

Code
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/roamman/archive/2010/07/02/1769816.html

类型初始值设定项引发异常相关推荐

  1. Oracle.DataAccess.Client.OracleCommand”的类型初始值设定项引发异常

    Oracle.ManagedDataAccess.dll 连接Oracle数据库不需要安装客户端 最开始,连接Oracle 数据是需要安装客户端的,ado.net 后来由于微软未来不再支持 Syste ...

  2. <Module>的类型初始值设定项引发异常

    的类型初始值设定项引发异常 参考文章: (1)的类型初始值设定项引发异常 (2)https://www.cnblogs.com/RealWorld/p/7843440.html 备忘一下.

  3. “System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常。

    "System.Transactions.Diagnostics.DiagnosticTrace"的类型初始值设定项引发异常. 参考文章: (1)"System.Tran ...

  4. MathWorks.MATLAB.NET.Arrays.MWArray”的类型初始值设定项引发异常 解决方法

    MathWorks.MATLAB.NET.Arrays.MWArray"的类型初始值设定项引发异常 解决方法 参考文章: (1)MathWorks.MATLAB.NET.Arrays.MWA ...

  5. VMWARE错误-“VirtualInfrastructure.Utils.ClientsXml“的类型初始值设定项引发异常

    VMWARE错误-"VirtualInfrastructure.Utils.ClientsXml"的类型初始值设定项引发异常 参考文章: (1)VMWARE错误-"Vir ...

  6. Entityframework:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。

    Entityframework:"System.Data.Entity.Internal.AppConfig"的类型初始值设定项引发异常. 参考文章: (1)Entityframe ...

  7. C# 出现System.TypeInitializationException类型初始值设定项引发异常

    C# 出现System.TypeInitializationException类型初始值设定项引发异常 参考文章: (1)C# 出现System.TypeInitializationException ...

  8. VMWARE错误-VirtualInfrastructure.Utils.ClientsXml的类型初始值设定项引发异常

    异常信息:"VirtualInfrastructure.Utils.ClientsXml"的类型初始值设定项引发异常. 解决方案:以管理员的身份运行客户程序 转载于:https:/ ...

  9. 一个类型初始值设定项引发异常

    事件原由: 上午打开VS,到系统的登录界面,登录提示"BLL类型初始值设定项引发异常",当一看到很是郁闷,昨天还运行的好好的,为啥今天一登录就会提示"BLL类型初始值设定 ...

最新文章

  1. Spring基于 Annotation 的简单介绍
  2. 为什么有三AI从来不追热点,信息越多学的越慢
  3. VS2017报错头文件unistd.h
  4. 【数据迁移】使用传输表空间迁移数据
  5. #{}不自动改参数类型_ORT-260电动打包机常规参数
  6. java 枚举类型enum
  7. maven 学习---Maven添加远程仓库
  8. H5开发中常用的js方法
  9. c++中基本的语法问题
  10. QT项目开发与团队合作
  11. 探索 OpenStack 之(15):oslo.messaging 和 Cinder 中 MessageQueue 消息的发送和接收
  12. 通过SharpShell快速实现Windows Shell扩展
  13. pcl1.8.1在VS2017中编译遇到pop_t找不到标识符的问题的解决办法
  14. FactorBook:人和小鼠转录因子chip_seq数据库
  15. 一个很有意思的熊猫免疫器
  16. iOS-二级评论功能
  17. MOSS系列一 MOSS的安装
  18. Singularity 快速上手, 带你飞
  19. 一池江水半江灯。繁星点点落江城,严霜寒雪封不住,若明若暗水火情
  20. Apache HAWQ集群的安装部署

热门文章

  1. mysql 书籍推荐 简书_Mysql复习必备----50条经典Sql语句
  2. notepad++打开一个某个工程目录
  3. 复位最佳方式:异步复位,同步释放
  4. windows从cmd中键入命令的一些常用小工具
  5. python3-泊松分布
  6. Oracle基本操作(二)
  7. Java中创建对象的几种方式
  8. 算法之【仿竖式算法】
  9. mysql返回记录的ROWNUM(转)
  10. 使用eclipse搭建嵌入式开发环境