为什么Visual Studio IntelliSense在这里无法工作?

7

这个问题是只有我遇到还是每个人都遇到了?每次在lambda表达式中(Enumerable后面的点号)编写'foreach'块时,它都无法工作:

Action t = ()=>
{
    foreach (var item in Enumerable.)
    {

    }
};

有任何想法为什么它在这种情况下不能正常工作吗?
我有VS 2010 SP1
更新:这不是关于“Enumerable”,而是关于任何对象。我可以尝试编写`new object()`并遇到同样的问题。

在哪里?我本来想写类似于“Enumerable.Range(1,10)”的东西。 - Poma
1
在这里得到 IntelliSense 解析器相关问题答案的机率非常小。建议您前往 connect.microsoft.com 发帖以获取更好的解决机会。 - Hans Passant
1
请问你能给我直接链接吗?我只在social.msdn.microsoft.com上找到了Visual Studio论坛,但在connect.microsoft.com上找不到有用的信息。 - Poma
3个回答

4

我可以在使用VS2010 SP1和全新项目时重现该错误:

class Program
{
    static void Main(string[] args)
    {
        Action t = () =>
        {
            foreach (var item in Enumerable.Range(1, 10))
            {
            }
        };
    }
}

删除“.Range(1,10)”并输入“.”,您应该会看到智能感知选项,但是却没有。 但如果您将表达式分配给临时变量,则可以按预期工作。请遵循Hans的建议并提交错误报告。


投票赞成我可以复现它。 - Rick Sladkey

2
即使您键入foreach的开放和关闭括号,也可以获得智能感知。为了使智能感知起作用,您需要在空格前面输入。
例如: foreach然后(),然后返回到()并开始输入var x in ...没有智能感知! 但是,foreach然后( )加上一个空格,然后返回到( )并在(右侧开始输入...现在您可以获得智能感知。
这是使用C#设置的行为。不确定其他语言的设置。

1

我发现只要不关闭括号,Intellisense 就可以为 foreach 工作。我的习惯是键入 foreach () 然后填充括号。如果我这样做,Intellisense 就无法工作,但是,如果我写 foreach ( 然后是代码,然后是 ),那么它就可以工作。


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