静态成员初始化异常的解决办法
今天遇到了这样一个问题,在调用某个类的静态方法时,产生了这样一个异常“未处理 TypeInitializationException “XXXXX”的类型初始值设定项引发异常。”然而,这个方法我是做了异常处理的,可就是无法捕获到这个异常的位置。后来发现,是由于这个类里的静态成员初始化产生了异常,这个要如何解决呢?
我们可以利用静态构造函数来解决这个问题,静态构造函数和实例构造函数之间的区别在于静态构造函数是由 CLR 调用执行的,所以静态构造函数只能是一个,同时不能有参数。
使用方法如下:
public class Command
{
private static SimpleDatabase simpleDatabase;
static Command() //前面不能有修饰符
{
try
{
simpleDatabase = new SimpleDatabase("settings.db", "mima");
}
catch
{
//处理异常
}
}
}
注意, 在 catch 到异常之后,我刚开始还想 throw new Exception("SimpleDatabase初始化失败")
,但是这样是不行的,依旧会在外层报出 “TypeInitializationException” 的异常。所以异常只能在静态构造函数内部处理掉,我的解决办法是,既然我不能打开自己建立的数据库,那么这个数据库文件肯定损坏了,或者并不是我原先生成的数据库,那我就重新建立一个数据库文件好了,因为我这个数据库文件里只是存放的一些简单配置,所以无妨。
评论区