空引用异常.....但该值不是 NULL

Null Reference Exception.....but the value is NOT NULL

提问人:John 提问时间:2/12/2018 最后编辑:John 更新时间:3/1/2022 访问量:2386

问:

我有一行代码标记为 NULL。这是怎么回事......它是一个字符串,在创建时填充。我的 VS2013 有错误吗?或者我需要更改的设置?string managerFirstName = "[email protected]";enter image description here enter image description here

C# 可视化工作室 visual-studio-2013 nullreferenceexception

评论

4赞 SSS 2/12/2018
尝试重建。有时,调试器会混淆异常所在的源代码行。
0赞 John 2/12/2018
我尝试了一次干净和重建,甚至重新启动了我的 cpu
0赞 G_S 2/12/2018
是 managerUser null 吗?而不是 managerFirstName?
1赞 Ian Mercer 2/12/2018
请从View Detail ...
1赞 Paurian 2/12/2018
我遇到了同样的问题。“clean”项目或解决方案实际上并不会清除所有已编译的 dll 的 fand pdb 的 rom bin/obj 调试目录。通过文件资源管理器删除 bin 和 obj 目录然后进行重建后,我的调试器正确显示了源代码并将其与错误相关联。

答:

0赞 Sampath 2/12/2018 #1

删除 Visual Studio 组件缓存后再尝试。

  1. 关闭 Visual Studio(确保任务管理器中不存在 devenv.exe) 删除目录:

    %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache
    
  2. 重新启动 Visual Studio

0赞 Sentinel 2/12/2018 #2

这在 VS2k13 中经常发生在我身上。基本上,您的代码不会被重新生成。即使在清理/重建之后,某些代码也会拒绝编译。曾经对我有用的是1。清理/重建。2. 在您正在查看的代码区域中更改代码。3. 在调用方法中放置断点。4. 调试并按 f11 逐行执行代码更改。

评论

0赞 John 2/12/2018
感谢您的回复,但这不起作用,VS 13、15 和 17 也发生了同样的问题
0赞 Sentinel 2/12/2018
尝试注释掉以后对变量的任何引用,或者如果它们是 linq 操作,则将它们更改为非 linq,看看是否有帮助。将文本内容也更改为“abc”。只是为了探索。
0赞 Sentinel 2/12/2018
尝试将调试视图切换到 IL,看看什么是空的。
0赞 Sentinel 2/12/2018
再来一个...检查这是否是线程问题。在代码周围设置锁
1赞 Sentinel 2/12/2018 #3

如果问题与代码相关,而不是与生成相关,则这看起来像是线程问题。尝试将整个函数包装在一个锁中,并寻找上下文是如何被破坏的。

4赞 SSS 2/12/2018 #4

崩溃的不是突出显示的行 - IDE 突出显示了错误的行。

您发布的堆栈跟踪提到了 。尝试查找使用该对象的代码行 - 可能是突出显示的行 () 上方的代码行。检查该调用的每个参数,看看是否可以找到 null 引用。RFS.DotNetNuke.Service.ActiveDirectorySynchronise.somethingGetManagerForOrgUnit

0赞 John 2/13/2018 #5

只想对所有帮助我解决这个问题的人说声谢谢......我找到了原因......就在

ADUser managerUser = GetManagerNameForOrgUnit(coreData.OrgAssignment_0001.OrgUnit.ID, coreData.PersonnelNo);

有一个 if 语句,在测试期间总是阻止代码命中 GetManagerNameForOrgUnit(),我一直在手动单步执行这个 if。

我把它注释掉了,代码工作正常。

再次感谢

0赞 Zubaer Naseem 9/16/2020 #6

当我手动跳过几行(显然不相关的代码部分)的执行时,我遇到了这个问题。

1赞 Jack 3/1/2022 #7

我在 VS 2022 中遇到了这个问题。发生这种情况时,我得到空引用和错误。我发现这是因为我的调试配置设置为“发布”而不是“调试”。

enter image description here

评论

0赞 Huy Hoang 6/16/2022
这也是发生在我身上的事情。由于配置不同,调试器指向了错误的行,其中没有任何东西null