在同一名称空间中,我有这两个函数
public static class DAL
{
public static bool SHOWMESSAGES = false;
private static StreamWriter logger = new StreamWriter(logLocation); // line 4
}
class testmain
{
static public void Main(string[] args)
{
DAL.SHOWMESSAGES = true; //line 5
}
}
如果我运行此代码,我将得到一个“未发生类型'System.TypeInitializationException'的未处理异常”。可能导致这种情况的原因是什么?
答案 0 :(得分:1)
在.NET中,类型不会在应用程序启动时初始化,而是在第一次访问类型时初始化。在你的情况下,它可能在第5行:DAL.SHOWMESSAGES = true;
在执行此语句之前,必须初始化DAL
类。执行静态构造函数,并将所有静态字段设置为其默认值。如果失败,您将获得TypeInitializationException
。
我建议你避免使用默认值的静态构造函数和静态字段,例如: private static _someField = new SomeClass();
我的情况看起来像这样:
public static class DAL
{
public static bool SHOWMESSAGES = false;
private static StreamWriter logger;
public static void Initialize()
{
logger = new StreamWriter(....);
}
}
甚至更好,完全避免静态类:
public class DAL
{
public bool ShowMessages { get; set; }
private StreamWriter logger;
public DAL()
{
logger = new StreamWriter(....);
}
}
class testmain
{
static DAL dal;
static public void Main(string[] args)
{
dal = new DAL();
dal.ShowMessages = true;
}
}