技术, C#

静态成员初始化异常的解决办法

今天遇到了这样一个问题,在调用某个类的静态方法时,产生了这样一个异常“未处理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” 的异常。所以异常只能在静态构造函数内部处理掉,我的解决办法是,既然我不能打开自己建立的数据库,那么这个数据库文件肯定损坏了,或者并不是我原先生成的数据库,那我就重新建立一个数据库文件好了,因为我这个数据库文件里只是存放的一些简单配置,所以无妨。

by 邓斌HADB

2012-12-15 晚 于宿舍

您已成功订阅 HADB.ME
真棒!下一步,完成结账以便解锁 HADB.ME
欢迎回来!您已登录成功。
登录失败,请重试。
操作成功!您的账户已全面激活,现在您有所有内容的权限了。
错误!Stripe 结账失败。
成功!您的账单信息已更新。
错误!账单信息更新失败。