当提供的字符串不为null时,string.IsNullOrEmpty返回true
我有一个unit testing,调用传递字符串的对象上的方法。
被调用方法的第一件事就是检查字符串是否为null或为空。
但是,无论filePath的值是什么,对string.IsNullOrEmpty的调用都为true。 见下图。
我在这里错过了什么吗?
编辑:
检查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
- 使用“非常非常”的大型数组
- 如何将zip文件内容提取到.NET 4.5中的文件夹中
- 如何配置protobuf-net的RuntimeModel.Default以支持序列化/反序列化SessionSecurityToken?
- 如何在Windowsapp store应用中打印WebView内容?
- Directory.GetCurrentDirectory()根据命令行参数返回不同的结果
- Volatile.Read / Volatile.Write是否为“双”primefaces?
- 无法使用斯堪的纳维亚字符向地址发送电子邮件
- Ajax.BeginForm指定“GET”类型的发布
- 如何启动EF6异步中的实体存储过程而不等待返回?