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

Pho*_*cUK 6 c# dictionary

其中Sessions一个Dictionary<Guid, WebSession>,而且NewSessionnew WebSession()我这一行:

Sessions.Add(NewSession.SessionID, NewSession);
Run Code Online (Sandbox Code Playgroud)

现在,在这一点上,你可能正在滚动你的眼球,并且"认为Sessions为null,或者NewSession.SessionID为null".然而:

Sessions == null
false
NewSession.SessionID == null
false
NewSession == null
false
Run Code Online (Sandbox Code Playgroud)

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

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

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

编辑:我想知道是不是因为我的WebSession继承,: Dictionary<String, Object>但它的构造函数没有调用base()- 但仍然无法解释它,因为我可以在做之前检查对象是否为nullAdd(..)

Joe*_*Joe 7

您需要使用诸如ConcurrentDictionary之类的线程安全集合,或者实现您自己的同步.

尝试Dictionary<TKey,TValue>从多个线程访问a 可能会产生heisenbugs,这可能很好地表现为a NullReferenceException.