可以从立即窗口调用扩展方法

Ɖia*_*zeƦ 13 c# linq code-contracts visual-studio

我问这个问题,因为每当我尝试从Visual Studio 2010中的立即窗口调用扩展方法时,我都会收到以下错误:

System.Collections.Generic.IEnumerable'不包含'ToList'的定义,也没有扩展方法'ToList'接受类型'System.Collections.Generic.IEnumerable'的第一个参数(你是否缺少using指令或装配参考?)

如果立即窗口不支持扩展方法,那么为什么当我键入我的变量(类型IEnumerable<QueryFilter>)后跟一个点时,IntelliSense会列出所有扩展方法?

我在命令窗口中输入的内容没有任何问题,因为如果我将其复制并粘贴到我的代码文件中并运行,则可以正常工作.

使用Visual Studio 2012为同一解决方案做同样的事情工作正常.如果我切换回VS2010并且问题仍然存在.

Aph*_*ion 6

扩展方法是语法糖.实际上它们是staticthis关键字实现的.您可以使用提供扩展方法的静态方法调用任何扩展方法.然后,您应该将正在扩展的对象作为第一个参数传递.

  • 虽然这是事实,而且我一直直接从 Enumerable 调用这些方法,但这非常不方便。调用多个 linq 扩展方法最终会变得非常长,并且立即窗口中会出现大量类型。有点令人沮丧。 (2认同)

Joe*_*Joe 5

扩展方法只是静态方法。

你应该能够使用例如 System.Linq.Enumerable.ToList()

  • 被否决是因为它没有回答为什么不能使用直接窗口中的正常流畅符号调用扩展方法的问题。 (2认同)

ken*_*n2k 5

这是因为System.Linq命名空间不是在调试时的当前上下文中导入的.

using System.Linq;
Run Code Online (Sandbox Code Playgroud)

在你的代码中.

Visual Studio 2010的示例:

在此输入图像描述

第一次System.LINQ进口,然后没有using System.LINQ.

编辑:如果导入名称空间并且IntelliSense正在显示方法,那么它可能是立即窗口的错误.在连接上查看此错误条目.


Ɖia*_*zeƦ 1

此行为是由代码契约引起的,并且不仅限于“立即”窗口,还包括“条件断点”窗口。

2016 年 3 月 1 日更新: 发现此MSDN 问题,询问为什么类型解析在我的监视窗口中不起作用。所描述的行为与我使用立即窗口时所经历的完全相同。原因也归因于 CodeContracts,并且已在 Microsoft Connect 上提交了错误报告。没有表明该错误是否已解决。

  • 您能否解释一下代码契约为何或如何导致此问题? (2认同)