收到TypeInitializationException

时间:2011-07-07 07:52:29

标签: c# exception

我有一个静态类。

static class AppDirectory
{

    public static string PACSTEMP = Path.Combine(Path.GetTempPath() ,"PacsTemp");//@"C:\MyTemp";

    public static string ImageTempDirectory = Path.Combine(Path.GetTempPath(), "ImageRetrieveTemp");//@"C:\ImageRetrieveTemp\";

    static AppDirectory()
    {


        if (Directory.Exists(PACSTEMP))
            Directory.Delete(PACSTEMP);

        if (Directory.Exists(ImageTempDirectory))
            Directory.Delete(ImageTempDirectory);

        Directory.CreateDirectory(PACSTEMP);
        Directory.CreateDirectory(ImageTempDirectory);
    }
}

它是一个静态类,有一个静态构造函数。当我尝试使用PACSTEMP和ImageTempDirectory变量时,它显示了类型初始化错误。我明白这是因为,AppDirectory没有初始化。

你能帮助我,如何初始化这类课程。或者我错过了OOP的规则。

谢谢

4 个答案:

答案 0 :(得分:3)

字段初始化程序发生在ctor之前,所以应该没问题。我怀疑这有点像权限错误。查看.InnerException以确切了解:

try {
    // something that uses AppDirectory, causing the error
} catch (TypeInitializationException ex) {
    Trace.WriteLine(ex.InnerException);
    throw;
}

也可能是删除失败,因为您要删除的目录不为空。

答案 1 :(得分:2)

显然你的静态构造函数在执行期间会抛出某种异常。

引用the documentation of TypeInitializationException

  

当类初始化程序无法初始化类型时,会创建一个TypeInitializationException,并传递对类型的类初始化程序抛出的异常的引用。 TypeInitializationException的InnerException属性保存基础异常。

因此,您应该查看TypeInitializationException的InnerException,以了解确实出错了什么。

答案 2 :(得分:1)

在静态构造函数中执行与IO相关的代码(打开/创建/删除文件/文件夹)会产生麻烦 - 预计此类操作会定期失败。

捕获所有IOExceptions并对其执行某些操作或者更好地在启动代码而不是构造函数中初始化此对象。

阅读依赖注入,以便更好地为应用程序提供共享服务。

答案 3 :(得分:-3)

我想问为什么你需要一个静态构造函数,你可以用静态方法替换构造函数并调用静态方法而不是静态构造函数。 原因: 每次调用静态const  1.调用静态类的任何方法  2.初始化任何sttic成员值  3.初始化对象 等

它不会被称为auto,只要,只要>引用该类的任何成员/方法,它就会被调用。因此,如果您有10个方法和10个变量,假设您只调用所有成员一次(10 + 10),那么您的静态构造函数将被调用20次。

您是否认为用静态方法替换静态constr并在应用程序中首先调用该方法更好,因此您的目录变量已设置。

希望这会有所帮助。如果没有,请让一些Google更好地理解静态构造函数

REG错误:我建议使用try-catch块并查看导致异常的原因。