【发布时间】:2013-12-13 14:28:13
【问题描述】:
我有一个static member,它是一个列表,它似乎有时会出于某种原因重置为null(可能是在未捕获的异常之后)。
这是我的代码:
public abstract partial class MyClass
{
private static List<MyClass> Types;
static MyClass()
{
Types = new List<MyClass>();
Types.Add(new Myclass(0));
Types.Add(new Myclass(1));
}
public static MyClass GetMyClass(int id)
{
return Types.Single(x => x.id == id);
}
}
GetMyClass 方法随后将触发 null 引用异常。
在我的代码中,我没有将此成员设置为null。
你有什么想法吗?
如果有帮助,这里是完整的代码:
public partial class TestRequest
{
public abstract partial class TrType
{
private static List<TrType> Types;
static TrType()
{
Types = new List<TrType>();
Types.Add(TrType.Real.Instance);
Types.Add(TrType.Template.Instance);
}
protected int idTrType;
public static TrType GetTrType(int id)
{
return Types.Single(x => x.idTrType == id);
}
public int IdTrType
{
get { return idTrType; }
set { idTrType = value; }
}
public abstract void Launch(TestRequest tr);
}
}
// In another file.
public partial class TestRequest
{
public partial class TrType
{
public class Real : TestRequest.TrType
{
private static Real instance;
public const int ID = 1;
protected Real()
{
idTrType = ID;
}
static Real()
{
instance = new Real();
}
public static Real Instance
{
get { return instance; }
set { instance = value; }
}
public override void Launch(TestRequest tr)
{
// do something
}
}
}
}
【问题讨论】:
-
您是否曾经将
null元素添加到Types?这是我看到它发生的唯一方式。 -
不,我插入元素的唯一位置是在这个静态构造函数中。
-
好的,那么
id属性的get是如何实现的呢?这是我在这里看到的最后一个可能抛出 NRE 的地方(假设那是实际抛出的)。
标签: c# list constructor static