使用 CodeMaid 清理代码后出现了一个奇怪的问题。现在,保存我所有全局变量和函数的类正在抛出异常,我不明白为什么。
GlobalClass.GetID() 中抛出外部异常:TypeInitializationException。
内部异常是:对象引用未设置到对象的实例
下面是导致此问题的一些代码的示例。
图书馆
namespace ErrorCode //Library
{
public static class GlobalClass
{
private static int _globalid = 0; //Never reached
public static int GlobalID
{
get
{
return _globalid;
}
} //Read-Only
public static int GetID()
{
retun _globalid++; //Crashes here with TypeInitialzationException
}
}
public class Entity
{
private int _id;
public int ID
{
get
{
return _id;
}
}
public Entity()
{
_id = GlobalClass.GetID(); //Crashes here with object reference not set to an instance of an object?
}
}
}
实际程序
using ErrorCode;
namespace MainProgram //The program that will run
{
public class Program
{
public Entity e = new Entity(); //Triggers GlobalClass.GetID()
}
}
有什么想法吗?
最佳答案
您对代码进行了过多的编辑并删除了异常的真正原因。具有如下字段初始值设定项的类:
public static class Globals {
private static int _globalid = 0;
}
不受 CLR 直接支持。编译器重写此代码,它为该类创建一个静态构造函数(或修改现有的构造函数)并按如下方式编写:
public static class Globals {
private static int _globalid;
static Globals() {
_globalid = 0;
}
}
它使用初始化器对所有静态字段执行此操作。其中之一是在您的情况下抛出异常,我们在您的代码片段中看不到它。追踪它的一种方法是强制调试器在异常发生时停止,“调试 + 异常”,勾选“CLR 异常的抛出”复选框。
关于C# .net 对象引用未设置为静态类上的对象实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11321959/