NullReferenceException添加到字典 - 非常肯定没有任何东西是null

时间:2013-03-03 19:08:33

标签: c# dictionary

其中SessionsDictionary<Guid, WebSession>,而NewSessionnew WebSession()我有这一行:

Sessions.Add(NewSession.SessionID, NewSession);

现在,在这一点上,你可能正在滚动你的眼球,并且“认为Sessions为null,或者NewSession.SessionID为null”。但是:

Sessions == null
false
NewSession.SessionID == null
false
NewSession == null
false

这是非常间歇性的。可能在50中发生过一次。无论何时发生,我都可以在即时窗口中进行Sessions.Add(NewSession.SessionID, NewSession);并且工作正常。

WebSession的构造函数是同步的,Sessions是一个没有添加糖的香草字典。

我很确定我已经做了尽职调查。在我的应用程序中发生这种情况是无害的,并且它被困住并且处理得很干净 - 但我首先要知道是什么导致它。

编辑:我想知道是不是因为我的WebSession继承了: Dictionary<String, Object>,但是它的构造函数没有调用base() - 但是我仍然无法解释它,因为我可以检查一下在执行Add(..)

之前,该对象不为null

1 个答案:

答案 0 :(得分:7)

您需要使用线程安全的集合,例如ConcurrentDictionary,或者实现您自己的同步。

尝试从多个线程访问Dictionary<TKey,TValue>可能会产生heisenbug,这可能表现为NullReferenceException