关于c#:string.IsNullOrEmpty当提供的字符串不为null时返回true

string.IsNullOrEmpty returns true when supplied string is not null

我有一个单元测试,该调用在传入字符串的对象上调用方法。

被调用的方法要做的第一件事就是检查字符串是否为null或为空。

但是,无论filePath的值是什么,对string.IsNullOrEmpty的调用都为true。 参见下图。

Why is string null or empty

我在这里想念什么吗?

编辑:

检查null和string.Empty分别按预期工作:

enter image description here

编辑2:

我已经清理了解决方案,通过文件系统删除了bin目录,并且在重建之后,调试器仍然显示应该抛出ArgumentNullException,尽管实际上并没有抛出该异常。


filePath的内容绝对不为null(也不为空),因此我们有两个选择:

  • 您有一个名为filePath的范围更广的范围变量(即全局变量),该变量在null时为空
  • 您的调试器正在引用较旧版本的二进制文件。在这种情况下,找出并重建解决方案

更新资料

您的问题更新使我认为(上面的)第二个选择是


这是我第一次遇到此问题。

我们现在逐步解决的方法是在IF语句的后面添加以下内容。

1
2
3
4
5
6
#if DEBUG
            else
            {
                // A hack to fix the debugger issue on the IsNullOrEmpty statement above.
            }
#endif

我也在Visual Basic中使用If String.IsNullOrEmpty(foo)体验到这一点。我同意Andrei的评论,这似乎与调试器如何可视化此特定结构有关。

清理/重建不影响它。有趣的是,如果您在If语句中添加了更复杂的主体,则调试器将仅在主体的最后一行暂停(即黄色箭头)。它实际上并不执行代码行。

如果有人可以向我们提供某些原因的信息,那将很有趣。

这是我看到的代码:

enter image description here

请注意,即使myItem.Subject不为null,调试器箭头也位于行e.Cancel = True上。当我按F10键时,箭头将前进到ElseIf语句,并且e.Cancel仍为False。

同样,当调试器在这条线上时,我无法像往常一样将箭头拖到另一行。如果我尝试通过拖动黄色箭头移动到另一行,则会出现以下错误:

enter image description here