Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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#.net对象引用未设置为静态类上对象的实例_C#_.net_Class_Exception - Fatal编程技术网

C#.net对象引用未设置为静态类上对象的实例

C#.net对象引用未设置为静态类上对象的实例,c#,.net,class,exception,C#,.net,Class,Exception,在使用CodeMaid清理代码后,我遇到了一个奇怪的问题。现在,保存所有全局变量和函数的类抛出异常,我不知道为什么 外部异常在GlobalClass.GetID()中引发:TypeInitializationException 内部异常是:对象引用未设置为对象的实例 下面是导致这种情况的一些代码的示例 图书馆 实际程序 有什么想法吗?尝试使用静态构造函数: public static class GlobalClass { static GlobalClass() {

在使用CodeMaid清理代码后,我遇到了一个奇怪的问题。现在,保存所有全局变量和函数的类抛出异常,我不知道为什么

外部异常在GlobalClass.GetID()中引发:TypeInitializationException

内部异常是:对象引用未设置为对象的实例

下面是导致这种情况的一些代码的示例

图书馆 实际程序
有什么想法吗?

尝试使用静态构造函数:

public static class GlobalClass
{
    static GlobalClass()
    {
        GlobalClass._globalid = 0;
    }

    private static int _globalid;
    public static int GlobalID
    {
        get
        {
            return _globalid;
        }
    }

    //...
}

您对代码进行了过多的向下编辑,并删除了导致异常的真正原因。具有如下字段初始值设定项的类:

public static class Globals {
    private static int _globalid = 0;
}
CLR不直接支持。编译器重写此代码,为类创建静态构造函数(或修改现有构造函数),并改为这样编写:

public static class Globals {
    private static int _globalid;
    static Globals() {
        _globalid = 0;
    }
}

它使用初始值设定项对所有静态字段执行此操作。其中之一是在您的案例中引发异常,我们无法在您的代码片段中看到它。一种方法是强制调试器在异常时停止,Debug+Exceptions,勾选CLR异常的抛出复选框。

正如Anthony Pegram所暗示的,我怀疑您有一个静态构造函数或另一个静态字段初始值设定项,而您的示例代码中没有包含它。此构造函数或初始值设定项正在引发空引用异常。

无法访问
globalid
的原因是您从未创建过
GlobalClass
的实例,因此当
Entity()
试图获取
globalid
时,它会崩溃。@MatthewRz不,GlobalClass是静态的。@blorghmm,我就是这么想的。你的GlobalClass中还有哪些静态初始值设定项?。。也许你在简化它时丢失了糟糕的代码,因为我们从来没有从GlobalClass初始化过一个新对象,所以不能调用添加到静态类中的构造函数吗?它是一个“静态”构造函数,被称为“类似”构造函数。但如果不加以纠正,这将暴露错误。我们以前遇到过并发问题,我们必须显式指定静态构造函数,而不是依赖编译器来为我们指定。哦,好吧,我不知道静态类可以有构造函数,这将在我的代码中简化很多。谢谢,我将尝试一下!看来它会解决的!
public static class Globals {
    private static int _globalid = 0;
}
public static class Globals {
    private static int _globalid;
    static Globals() {
        _globalid = 0;
    }
}