我可以使用C#Interactive窗口或立即窗口与当前调试会话变量进行交互吗?

时间:2013-07-04 23:53:30

标签: c# visual-studio-2012 roslyn

在我看到here时,我可以使用这两个窗口来创建对象并使用我自己的代码中的方法。但是在调试(暂停或断点停止)时,我能够通过立即窗口访问当前上下文中数组的位置,如下所示:如果我在此代码后面暂停了调试会话:

    byte[] R = new byte[100];
    for (int i = 0; i < 100; i++)
    {
        R[i] = (byte)1;
    }

我可以通过立即窗口访问R [37]并看到它的值,但是我无法在立即窗口中编码循环来验证所有值是否相等(只是一个愚蠢的例子),实际上,我根本无法编码(因为这不是它的目的)。

另一方面,我可以使用C#Interactive进行编码,但无法与当前的调试会话变量进行交互。

好吧,我担心答案是否定的,但有没有办法在VS2012中存档(当前调试会话变量的代码)?

3 个答案:

答案 0 :(得分:1)

你可以使用linq来做你在循环中可以做的任何事情,因为它被评估为表达式

例如

  R.Where(item => item != R[0]);

将显示所有不等于第一项的项目。


这就是为什么你可以用linq表达式做任何事情:

Enumerable.Range(1,1).Select(one => {

     // any function code you want here
     //return any type of variable.

   });

答案 1 :(得分:1)

正如您所料,答案是否定的,没有办法从交互式窗口与您的debugee状态进行交互。这是我们继续思考的一个场景,但在此之前,您仍然坚持使用交互式窗口,并且存在所有限制。

答案 2 :(得分:0)

一种方法是在代码中添加静态辅助方法,以协助进行此类调查。

如果你不能修改代码 - LINQ确实提供了许多有用的方法作为Hogan的指针,也是由于对“立即窗口中没有lambda表达式”的限制,你只能进行相对基本的调用。

另请查看String.Join IEnumerable - 将值组合显示非常有用(如果元素ToString有意义。