gpt4 book ai didi

c# - 条件断点和监 window 口不会短路表达式计算

转载 作者:行者123 更新时间:2023-11-30 21:48:50 26 4
gpt4 key购买 nike

[编辑 - 更改示例以避免混淆根本问题]

在尝试弄清楚为什么我的条件断点在 Visual Studio 中不断产生错误时,我偶然发现了一种我没有预料到的行为。

在监 window 口、即时窗口或作为断点的条件下,Visual Studio 不会出现短路表达式计算。

例如,在这之后一行的断点处停止:

string obj = "hello";

并在监 window 口中评估以下内容

obj is int && ((int)obj) == 1

应该给出结果

false

而是给出

CS0030: Cannot convert type 'string' to 'int'

这会阻止我做一些事情,例如检查对象的类型,然后转换为该类型并检查我的条件断点中的属性,这会严重降低它们的用处。

其他人是否看到这种行为,有谁知道如何设置条件断点/观察窗口短路?

我想出的一个不太理想的解决方法是将表达式包装在代码中的一个方法中,然后从监 window 口对其求值。但是,这涉及更改代码和重新编译,而不是能够在调试时动态更改条件。

最佳答案

实际上这个语句在即时窗口或代码中都不起作用,因为编译器知道 obj 永远不会转换为 int

如果您将 obj 定义为 object,它将按预期工作。

object obj = "hello";
bool result = obj is int && ((int)obj) == 1;

上面的代码将作为断点条件进行编译和工作。

正如 leppie 提到的,您可以重新转换对象 ((int)(object) obj) 来避免这种情况,但这应该始终是最后的手段。

关于c# - 条件断点和监 window 口不会短路表达式计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37388926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com