c# - NullReferenceException 添加到字典中 - 非常确定没有什么是空的

标签 c# dictionary

在哪里SessionsDictionary<Guid, WebSession> , 和 NewSessionnew WebSession()我有这一行:

Sessions.Add(NewSession.SessionID, NewSession);

此时您可能正在转动眼球并思考“要么 Sessions 为空,要么 NewSession.SessionID 为空”。然而:

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

这是断断续续的。可能每 50 次发生一次。无论何时发生,我都可以做 Sessions.Add(NewSession.SessionID, NewSession);在即时窗口中,它工作正常。

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

我很确定我已经在这一点上进行了尽职调查。它在我的应用程序中发生是一件无害的事情,它被捕获并干净利落地处理 - 但我对首先导致它的原因感到困惑。

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

最佳答案

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

正在尝试访问 Dictionary<TKey,TValue>来自多个线程可能会导致 heisenbugs,这很可能表现为 NullReferenceException .

关于c# - NullReferenceException 添加到字典中 - 非常确定没有什么是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15189617/

相关文章:

c# - 仅获取容器中 Azure blob 文件的所有名称?

c# - 将图像添加到 pictureBox

python 导入 csv 列表

c# - 列表框可以显示字典中的键和值

c# - 配置现有服务在系统启动时运行

c# - 使用 .NET 在服务器端生成 Flash 对象

java - 如何在Gattle Feeder中传递java HashMap

swift - Swift 中的字典数据结构返回 nil

python - 将字典合并到列表字典中

c# - 将 C# 代码列表导出为具有颜色语法的 HTML 代码