Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误:Daemon.Global的类型初始值设定项在c中引发异常#_C# - Fatal编程技术网

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引用异常,对象引用未设置为对象的实例