Visual Studio 2015即时窗口中无法使用Linq扩展方法

5

错误 CS1061:“ICollection<>”不包含名为“SelectMany”的定义,也没有接受类型为“ICollection<>”的第一个参数的扩展方法“SelectMany”(是否缺少使用指令或程序集引用?)

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)时,就会出现上述错误。

我是不是以一种不正确的方式进行评估?我错过了什么?


3
确定一下,你确定已经使用了 System.Linq 吗? - Gilad Green
你是否正在使用 System.Linq? - Vivek Nuna
2
@GiladGreen,@mww,是的,我正在使用System.Linq。我必须告诉你它在namespace {}之外并且在其顶部。我提到这一点是因为我想明确告诉它不在namespace {}内。此外,F10正常工作。 - blogbydev
尝试将 System.Data.Entity dll 引用到您的项目中,可能会解决您的问题! - Sunil Kumar
今天这个奇怪的问题居然解决了!!不确定是什么原因导致了间歇性的错误。 - blogbydev
我记得在某个地方读到过,这与pdb文件和丢失的符号有关。我不确定,但如果我删除pdb文件并重新调试,事情是否会正常工作。下次遇到这个问题时,我会发布我的发现。 - blogbydev
1个回答

1

我无法给出为什么会发生这种情况的原因(我在“立即窗口”中也遇到了类似的问题),但我发现您可以通过静态类访问来调用扩展方法。 在您的情况下,应该是:

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

这太棒了,而且很有技巧性。我喜欢它。 - Botonomous
谢谢@Lennart,这个方法很有效!我需要这样的东西来满足紧急需求,我可以再坚持一段时间。但是,我不能将其作为我所问的特定问题的答案接受。我们使用扩展方法的原因是为了能够链接它们。在VS 2015即时窗口中是不是应该这样工作的呢? - blogbydev
@singsuyash 请注意,您可能正在调用不同的扩展方法。真正的代码可能是一个 IQueryable<T>,它有不同的扩展方法。 - Maarten

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