foreach (KeyValuePair<uint, Character> kvp in World.AllChars)
{
Character Charr = kvp.Value;
Charr.Do(); <-- NullrefException: Charr is null
}
带支票的代码:
foreach (KeyValuePair<uint, Character> kvp in World.AllChars)
{
Character Charr = kvp.Value;
if(Charr != null)
{
Charr.Do(); <-- NullrefException: Charr is null
}
}
编辑:
Do()内部没有任何内容导致它为null,因为它甚至不执行Do()因为Charr为null。
这就是我的循环的样子。我已经尝试过if!= null检查,但它仍然会超过它并抛出一个nullref异常。
我该怎样防止这种情况?我使用的是Concurrent Dictionary和高度多线程的服务器架构。
答案 0 :(得分:1)
问题提到您检查null
,但不清楚您正在做哪个值。请考虑以下代码
Character Charr = kvp.Value;
if (Charr != null) {
Charr.Do();
}
在这种情况下,Char
无法成为null
。 Charr
的成员可能是null
,因此Do
方法会抛出。如果是这种情况,尽管Character
类型可能不适合多线程场景(至少它们的使用方式)
答案 1 :(得分:0)
如果您对Charr添加了空检查并仍然获得空引用异常,Do()
方法中的某些内容将导致此异常。检查异常的调用堆栈或/并使用调试器逐步完成代码。