C# 错误:Daemon.Global的类型初始值设定项在c中引发异常#
我正在使用下面的类文件,其中一些变量被声明为在整个应用程序中使用。 现在我在另一个类文件中使用了变量C# 错误:Daemon.Global的类型初始值设定项在c中引发异常#,c#,C#,我正在使用下面的类文件,其中一些变量被声明为在整个应用程序中使用。 现在我在另一个类文件中使用了变量BlockLogOut,使该值为true 我只是把它放在下面一行,并在其中得到了错误类型初始化异常 Global.BlockLogOut=True 奇怪的是,它已经运行了好几个月了,我现在在上面的线路上发现了这个错误。当然,我在修改应用程序中的一些其他内容,但肯定不是这个类文件。 问题是什么 内部异常:system.null引用异常,对象引用未设置为对象的实例 namespace Daemo
BlockLogOut
,使该值为true
我只是把它放在下面一行,并在其中得到了错误<代码>类型初始化异常
Global.BlockLogOut=True
奇怪的是,它已经运行了好几个月了,我现在在上面的线路上发现了这个错误。当然,我在修改应用程序中的一些其他内容,但肯定不是这个类文件。
问题是什么
内部异常:system.null引用异常,对象引用未设置为对象的实例
namespace Daemon
{
class Global
{
public static bool BlockLogOut = false;
}
}
此错误:作为类初始值设定项引发的异常的包装器引发的异常。这个类不能被继承。我打赌您有一个静态构造函数:)如果是这样,那么异常实际上发生在静态构造函数中
namespace Daemon
{
using System;
public class Global
{
public static bool BlockLogOut = false;
static Global()
{
throw new Exception();
}
}
}
namespace ConsoleApplication
{
public class Program
{
static void Main(string[] args)
{
Daemon.Global.BlockLogOut = true; // TypeInitializationException
}
}
}
您最近是否将目标框架更改为.NET4.0?因为这可能是由于.NET4.0中的类型初始化更改造成的(JonSkeet在他的博客上对此有详细介绍) 长话短说,关于CLR初始化类型的方式和时间,已经有了一些变化。虽然它仍然符合规范,但它是以一种更懒惰的方式来实现的。总之,在实际需要字段之前,它不会初始化字段(不过我不太确定这些更改的特性) 确保您不依赖于在某种类型的空
Initialize(){}
方法中初始化BlockLogOut
。在调用使用它的方法之前,它实际上不会被初始化(是的,这也适用于构造函数和实例方法;只要它们不使用该特定字段)
但与往常一样,我们保证该字段将在需要之前初始化,并且该初始化最多只发生一次。我假设示例代码不是全局类中的完整代码。空引用异常表示您正在静态构造函数中的某处使用类实例;它与代码中包含的GlobalLock变量无关,因为它是值类型而不是类。根据文档,TypeInitializationException有一个innerexception属性,其中包含更多有用的信息。你能发布InnerException吗?内部异常:system.null引用异常,对象引用未设置为对象的实例如果使用静态全局(){}它不会抛出错误这是我的观点,问题在于他的静态构造函数内部异常:system.null引用异常,对象引用未设置为objectInner异常的实例:system.null引用异常,对象引用未设置为对象的实例