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 for Mac 上的奇怪 linq 异常
Visual Studio 的“自动解析”功能不适用于扩展方法 - 现在怎么办?