VS2015中立即窗口中的Lambda表达式

36
我是在运行Visual Studio 2015,有人声称lambda表达式支持立即窗口、监视窗口和其他地方。但对我来说并不起作用。 我创建了一个新的控制台应用程序,并使用以下代码:
static void Main(string[] args)
{
    var list = new List<int> {1, 2, 3, 4, 5, 6, 7};
}

然后在立即窗口中尝试了一些简单的lambda表达式,并查看如下所示: enter image description here 正如您所看到的,它给出了“表达式不能包含lambda表达式”的提示。 我已经在工具->选项->调试设置中查找,但没有找到与此问题相关的内容。 我正在运行的版本是VS2015企业版,14.0.24720.00更新1。 可能是什么原因导致了这个问题?

4
请确保在调试选项中禁用了“托管兼容模式”和“旧版表达式”。 - Alexander Derck
1个回答

50

对我来说这绝对有效,看起来当我勾选 使用托管兼容性模式使用旧版 C#和VB表达式求值器 时它就停止工作了。确保取消选中那些选项。

输入图像说明


4
我也有同样的问题。我已经将它们都取消勾选了,但我仍然遇到了相同的错误:error CS1061: 'List<XXX>' does not contain a definition for 'Where' and no extension method 'Where' accepting a first argument of type 'List<XXX>' could be found (are you missing a using directive or an assembly reference?) - Simple Fellow
4
由于即时窗口无法运行 using 语句,您需要将 using System.Linq; 语句添加到您正在调试的类中。一旦这样做,即时窗口应该能够识别扩展方法。 - Tom
2
这可能对一些人来说很明显,但是在运行代码时你不能更改这些选项(它们被禁用了),必须停止VS,然后才能更改这些选项。 - David Rogers
1
在 Visual Studio 2017 中,这对我也不起作用。但在我的情况下,它是由通过 NuGet 引用到我的项目中的库 Alea 引起的。如果有帮助的话... - Guillaume
1
@ProtectorOne 不好意思...而且我已经无法访问这个源代码了,所以即使它能提醒我,我也无法检查它...但我认为问题不在于NuGet,而是包本身。在我的情况下,这个包 - Alea - 在操作IL。因此,编译后的代码可能不是VS调试器期望执行lambda表达式所需的代码...这只是基于这个猜测的教育性猜测。 - Guillaume
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接