Linq 扩展方法在 Visual Studio 2015 即时窗口中不可用

Posted

技术标签:

【中文标题】Linq 扩展方法在 Visual Studio 2015 即时窗口中不可用【英文标题】:Linq Extension Methods Not available in Visual Studio 2015 Immediate Window 【发布时间】:2016-10-13 12:45:23 【问题描述】:

错误 CS1061:“ICollection”不包含“SelectMany”的定义,并且找不到接受“ICollection”类型的第一个参数的扩展方法“SelectMany”(您是否缺少 using 指令或汇编参考?)

Visual Studio 2015 支持在调试模式下的即时窗口中评估 linq lambda 表达式。我已经使用控制台应用程序对其进行了测试,其中我获取Process.GetProcesses(),转到即时窗口并开始在其上写入.Select.Where。它工作正常。

但是,我不能在我的项目中做同样的事情。

我的断点在这一行:

return Dimensions.Values.SelectMany(dimension => dimension.Attributes)
                        .FirstOrDefault(dimensionAttribute => key.Equals(dimensionAttribute.Key));

参加 F10 比赛。但是,当我尝试在即时窗口(即Dimensions.Values.SelectMany(dimension => dimension.Attributes))中部分运行相同的表达式时,出现上述错误。

我是否试图以不正确的方式对此进行评估?我错过了什么?

【问题讨论】:

只是为了确定......你确定你有using Systen.Linq吗? 你在使用 System.Linq 吗? @GiladGreen,@mww,是的,我正在使用System.Linq。我必须告诉你它在外面namespace 和上面。我提到这一点是因为我想明确告诉它不在 namespace 内。此外,F10 正在运行。 尝试在您的项目中包含System.Data.Entity dll 引用,可能会解决您的问题! 奇怪,今天还能用!!不确定间歇性行为。 【参考方案1】:

我无法告诉您发生这种情况的原因(即时窗口也有类似的问题),但我发现您可以通过静态类访问来调用扩展方法。你的情况是:

Enumerable.FirstOrDefault(Enumerable.SelectMany(Dimensions.Values, dimension => dimension.Attributes),dimensionAttribute => key.Equals(dimensionAttribute.Key));

【讨论】:

该死,这太棒了,而且很hacky。我喜欢它。 感谢@Lennart,这行得通!我急需这样的东西,我可以航行更长的时间。但是,我不能接受这个作为我提出的具体问题的答案。我们使用扩展方法的原因是我们可以链接它们。它是否应该在 vs 2015 即时窗口中工作? @singsuyash 请注意,您可能会调用不同的扩展方法。真正的代码可能是IQueryable<T>,它有不同的扩展方法。

以上是关于Linq 扩展方法在 Visual Studio 2015 即时窗口中不可用的主要内容,如果未能解决你的问题,请参考以下文章

visual studio 扩展插件

Visual Studio for Mac 上的奇怪 linq 异常

当 Visual Studio 扩展遇到错误时

Visual Studio 的“自动解析”功能不适用于扩展方法 - 现在怎么办?

在 Visual Studio 2012 RC 中,如何调试 javascript IntelliSense 扩展?

是否可以在 Visual Studio Code 扩展中访问鼠标事件