当提供的字符串不为null时,string.IsNullOrEmpty返回true

我有一个unit testing,调用传递字符串的对象上的方法。

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

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

为什么字符串为null或为空

我在这里错过了什么吗?

编辑:

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

在此处输入图像描述

编辑2:

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

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

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

更新

你的问题更新让我觉得第二个选项(上面的选项)是一个

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

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

如果有人能给我们一些关于为什么会发生这种情况的见解会很有趣。

这是我看到的代码:

在此处输入图像描述

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

此外,虽然调试器在这一行,我不能像往常一样将箭头拖动到不同的行。 如果我通过拖动黄色箭头尝试移动到另一行,我会收到以下错误:

在此处输入图像描述

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

我们现在采取的方式是在IF语句的背面添加以下内容。

 #if DEBUG else { // A hack to fix the debugger issue on the IsNullOrEmpty statement above. } #endif