问题 如何在VS 2013中的立即窗口中执行LINQ和/或foreach?


在调试过程中探测当前状态时,立即窗口是非常有用的工具。我了解到,通过使用问号,可以在那里做更多的事情,如图所示 在这篇文章中

但是,我仍然不知道如何在那里执行LINQ查询(包含 lambda表达式)。我也没能执行一个 的foreach 声明。

执行以下语句时:

?(things.Select(thing=>thing.Id);)
?(foreach(var thing in things);)

我收到这些错误:

表达式不能包含lambda表达式
  无效的表达式术语'foreach'

(如何)我可以在立即窗口中执行这些操作吗?

还有一个工具 VS画廊 但它据说它只适用于VS05和VS08,大多数程序员在很久以前就已经落后了。我正在寻找适用于VS13和/或VS15的东西。


2840
2017-10-22 09:54


起源

我很确定你不能在即时窗口或快速观察中做到这一点。我的100%猜测是运行时编译器解释的复杂性 - Anthony Russell
vs2015是否允许在监视窗口中调试lambdas? dirkstrauss.com/... 还说 这里 你可以使用手表/即时窗口。 - Ric
@StasIvanov请你指出那个重复我问题的部分吗?我没有看到相似性(除了一些使用的词)... - Konrad Viltersten
@KonradViltersten我认为你的问题是关于在debug / immediate / quick watch windows中执行lambdas。在上述问题中已经回答了这个问题。还有一个答案,您可以在VS2015中实际执行此操作,但在早期版本中则不行。但也许我误解了你的问题。 - Stas Ivanov


答案:


根据visual studio 2015中提供的新功能,现在可以在watch / immediate窗口中获得对lambdas调试的支持:

调试器Windows中的Lambda表达式

您现在可以在Watch,Immediate和中使用lambda表达式   C#和Visual Basic中的其他调试器窗口。

资源:

Visual Studio 2015 RTM


9
2017-10-22 10:02



2013年?我很高兴不必为此升级... - Konrad Viltersten
找到任何东西都没有太大的运气 - 但仍在观察! - Ric
请注意,它在托管兼容模式下不起作用 - Maxence


在VS2015中,您可以在监视窗口和即时窗口中使用lambda表达式。

只需在即时窗口中添加监视或输入(在调试时和 things 在范围内):

things.Select(thing => thing.Id);

你会得到一份结果清单。

这是一个博客 这个


4
2017-10-22 10:01



VS 2013的运气好吗?据我所知,现在大多数人都在使用它,VS 2015尚未正式发布。有时一个人无法选择版本,因为客户端会发号施令。 - Konrad Viltersten
不幸的是我没有意识到。 Visual Studio 2015于2015年7月20日发布。 - Jamie Rees
请注意,Visual Studio 2015 Community Edition具有与Pro完全相同的功能(就像您可以安装插件一样)并且完全免费。 - Roy T.
@RoyT。我被警告说有 某些问题 在VS15仍然。根据我的经验,今天的RTM不是现成的版本。 SP1是。 :)话虽如此,如果社区版具有相同的功能,那么获得应付VS的重点是什么? - Konrad Viltersten
@KonradViltersten在我的工作中我们都迁移了。当然还有一些小问题,但2013年也有一些小问题。你提供的链接并没有真正列出具体问题(错误链接?)什么阻碍了你? :) - Roy T.


不幸的是,似乎不可能从immidiate窗口或观察窗口使用lambda。技术原因可能是linq查询通常转换为普通表达式,并且这需要一个完整的编译步骤而不是这两个窗口使用的技巧。

万一你不知道 thing=>thing.Id part是lambda表达式。


0
2017-10-22 09:57



嗯...是的,我确实知道lambda表达式是什么。只是我设法执行LINQ查询 排除 小羊(好吧,不知道是否 。第一()  - 注意空括号实际上算作LINQ,但仍然如此)。此外,您的回复不包括 的foreach 问题。 (注意,我没有投票。) - Konrad Viltersten
First() 不包含lambda,也不是Linq查询。 First() 被定义为所有实现类型的扩展方法 IEnumerable<T>。 - Roy T.
我不知道为什么 foreach 声明不起作用。那确实很奇怪! - Roy T.