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