[编辑 - 更改示例以避免混淆根问题]
在尝试弄清楚为什么我的条件断点在Visual Studio中会生成错误时,我偶然发现了一个我没有预料到的行为。
在观察窗口、立即窗口或断点条件中,Visual Studio似乎没有短路表达式求值。
例如,在此行后停止断点:
string obj = "hello";
在监视窗口中评估以下内容
obj is int && ((int)obj) == 1
应该给出结果
false
但是实际上却给出了
CS0030:无法将类型“string”转换为类型“int”
这会阻止我执行一些操作,例如检查对象的类型,然后将其强制转换为该类型并在我的条件断点中检查属性,这严重降低了它们的有用性。
其他人是否看到了这种行为,是否有人知道如何使条件断点/监视窗口短路?
我想到的一个不太理想的解决方法是在代码中将表达式包装在一个方法中,并从监视窗口中评估此方法。但是,这涉及更改代码和重新编译,而不能在调试时动态更改条件。
int y = 0; bool asdfg=false && (1 / y == 1);
- Pikohobj
不是一个字符串,因此它首先尝试在开始评估条件之前转换对象... - Pikoh