【发布时间】:2015-02-06 12:57:03
【问题描述】:
这是非常危险的,所以我想知道为什么允许这样做。由于我经常需要在 VB.NET 和 C# 之间切换,我有时会添加如下断点条件:
foo = "bah"
如果string 变量foo 是"bah,我想停止,所以正确的方法是使用foo == "bah" 而不是foo = "bah"。
但它“有效”。您不会在编译或运行时收到任何警告或错误。但实际上这修改变量foo,即使它有不同的值,它也总是"bah"。由于这是无声地发生的(断点永远不会被击中),因此非常危险。
为什么允许?我的推理错误在哪里(除了混淆 C# 和 VB.NET 语法)?在 C#(相对于 VB.NET)中,assignment statement 返回分配的值,因此在这种情况下不是bool,而是string。但是,如果您选中 “Is True” 框,则断点条件必须是 bool。
这是我(德国)IDE 中的一个小示例“程序”和屏幕截图:
static void Main()
{
string foo = "foo";
// breakpoint with assignment(foo = "bah") instead of comparison(foo == "bah"):
Console.WriteLine(foo); // bah, variable is changed from the breakpoint window
}
断点条件对话框:
包含断点的图像代码:
【问题讨论】:
-
好问题。这听起来绝对是个错误。
-
@KooKiz:如果您“上线”,请不要忘记删除断点。实际上,我的代码在夜间导入的 Windows 服务中运行。现在我在数据库中有数千条不正确的记录。
-
在 VS 2013 中尝试这个(我知道你的问题被标记为 2010)得到一个错误,包括“断点条件必须评估为布尔运算” - 所以可能已经修复了。
-
我确认该错误存在于 VS2012 和 VS2008 中。不幸的是,我在那台计算机上没有 VS2013,但 @Damien_The_Unbeliever 的结论似乎很可能
-
@PatrickHofman:我稍后编辑了我的评论,是的,也许这需要关闭,因为它无法以有用的方式回答。如果有人在 Visual Studio 更新历史记录中找到有关此错误的文档或在“已修复问题”下,那将是一个很好的答案。
标签: c# vb.net visual-studio-2010 debugging breakpoints