21

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

但是,我仍然不知道如何在那里执行 LINQ 查询(包括lambda 表达式)。我也未能执行foreach语句。

执行以下语句时:

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

我收到这些错误:

表达式不能包含 lambda 表达式
表达式术语“foreach”无效

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

VS Gallery中也有一个工具,但据说它仅适用于 VS05 和 VS08,大多数程序员很久以前就已经将其抛在了后面。我正在寻找适用于 VS13 和/或 VS15 的东西。

4

3 回答 3

12

根据 Visual Studio 2015 中提供的新功能,现在可以在监视/立即窗口中提供对调试 lambdas 的支持:

调试器窗口中的 Lambda 表达式

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

资源:

视觉工作室 2015 RTM

于 2015-10-22T10:02:19.390 回答
8

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

只需在即时窗口中添加手表或类型(调试时并things在范围内):

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

你会得到一个结果列表。

这是一个关于这个的博客

于 2015-10-22T10:01:17.357 回答
-1

不幸的是,从即时窗口或监视窗口中使用 lambda 似乎是不可能的。造成这种情况的技术原因可能是 linq 查询通常被转换为普通表达式,并且不知何故这需要一个完整的编译步骤,而不是这两个窗口使用的诡计。

如果您不知道该thing=>thing.Id部分是 lambda 表达式。

于 2015-10-22T09:57:53.233 回答