Visual Studio:让调试器意识到函数不会导致“副作用”

我有一个对象,我必须通过观察窗口观看很多次的function输出。 问题是每次我都要按下刷新按钮,因为“这个表达会导致副作用,不会被评估” 。 有没有办法用[DoesNotCauseSideEffects]之类的东西来标记一个函数,这样每当我迈出一步时,手表会自动评估它?

我在VS2008或2010中编写C#。

编辑:该function看起来像这样,并且正如您所看到的那样,不会产生任何副作用。(x,y,z都是双打)

public override string ToString() { return "{ " + x.ToString(".00") + ", " + y.ToString(".00") + ", " + z.ToString(".00") + "}"; } 

你可以在表达式中附加,ac ,让它自动刷新值:

 x.ToString(),ac 

有关更多信息和其他格式说明符,请参阅MSDN。

不,这是不可能的。 确定函数是否具有副作用实际上是由语言特定表达式评估者进行的。

C#和VB.Net都有不同的EE,每个都有自己的决定,是否一个函数不会引起副作用。 通常,他们都认为显式函数调用具有副作用,并且不会在调试器想要禁用副作用的情况下处理它们,例如步进。

解决这个问题最简单的方法是使用Property。 默认情况下,属性实例不被视为具有副作用,并且它们将在步骤中进行评估。

编辑

想要澄清一些误解。 调试器或表达式计算器都不会进行任何方法检查以确定函数是否具有副作用。 他们只是注意到一个function的存在,并将其标记为可能有副作用。 他们不会以任何方式尝试检查方法的代码。

您是否尝试过这样做,以便该函数不会修改任何类属性或全局变量? 我对“副作用”的袖口定义是“在执行函数期间对执行环境的更改”。 所以这个function会导致副作用:

 void addValues(int operand1, int operand2) { globalSum = operand1 + operand2; } 

但是这个function没有:

 int addValues(int operand1, int operand2) { return operand1 + operand2; } 

尽可能避免副作用总是更好。 它们可能会导致调试问题。 请参阅此维基百科文章 。