c#: VS 2008调试器执行属性代码

本文关键字:执行 属性 代码 调试器 2008 VS | 更新日期: 2023-09-27 18:08:21

我有以下两行代码:

lstvbWerteC.Clear ();
if (...)

lstvbWerteC是List带类作用域。如果在VS 2008调试器中,我在If语句上设置了一个断点,我将期望lstvbWerteC。计数为0,但实际上是1。我的类有一些属性确实填充了列表。为了防止调试器中的副作用,所有属性都具有属性[DebuggerBrowsable (DebuggerBrowsableState.Never)]。然而,只要本地窗口可见,调试器似乎就会执行填充列表的代码。隐藏了locals窗口后,列表在到达if断点时始终为空。

c#: VS 2008调试器执行属性代码

请提供调试器的详细信息。

Visual Studio菜单:工具-选项-调试-常规。取消选中"启用属性计算"选项。

这是来自Visual Studio 2010。Visual Studio 2008应该有相同或类似的选项

我想您所描述的行为在大多数文档中是未定义的。当然,没有要求任何调试器(包括VS !)都应该尊重DebuggerBrowsable属性。此外,在调试窗口中缺少显示项的并不一定保证该项不被调试器计算

在调试选项下有一个名为"启用属性评估"的选项,可能对您的具体情况有帮助,也可能没有帮助,但总的来说,我想说您不能依赖这个。

有一个经常被重复的建议:"属性getter不应该有[可见的]副作用。"您的属性获取器确实有副作用,这会给您的调试体验带来问题,但它也可能使您的类作为一个整体对其他开发人员来说难以理解。我的建议是考虑重新设计,这样获取属性值就不会改变列表的内容。