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

时间:2013-06-17 14:34:50

标签: c# .net-4.5

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

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

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

Why is string null or empty

我在这里遗漏了什么吗?

编辑:

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

enter image description here

编辑2:

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

3 个答案:

答案 0 :(得分:5)

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

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

<强>更新

您的问题更新让我觉得第二个选项(上述选项)是

答案 1 :(得分:0)

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

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

如果有人能够让我们了解为什么会发生这种情况,那将会很有趣。

以下是我看到的代码:

enter image description here

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

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

enter image description here

答案 2 :(得分:0)

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

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

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