Visual Studio Snippets - 如何指定foreach循环的集合

时间:2009-05-24 16:53:37

标签: c# visual-studio resharper foreach code-snippets

使用Visual Studio快捷方式/片段时,是否可以提前/自动指定集合,而不是之后填写绿色框?

在这种情况下,我试图用尽可能少的键击来提出类似下面的内容:

foreach (ListItem item in ListBox1.Items)
{
    //
}

例如,快捷键“CTRL + K,CTRL + X foreach”会猜测我想要迭代的集合,并且通常会出错。我经常最终得到以下结论:

foreach (object var in collection_to_loop)
{
        //
}

如果我输入集合标识符和/或使用“Surround with”它不会更好,因为它将突出显示的项目放在循环块中:

foreach (ListItem item in ListBox1.Items)
{
    ListBox1.Items 
}

有办法做到这一点吗?我正在使用Visual Studio 2005,但很高兴被告知这可以在2008年完成,或者使用插件。


编辑:好吧,似乎,我不仅没有清楚地解释我的意思,我看到了一个Resharper功能,并认为它是一个内置的VS功能。事实证明,这是一个Resharper“Live Templates”,它正在努力猜测将什么样的集合类型放入循环中,并在1/4的时间内正确地进行调整。

我所追求的是对Resharper如何做出猜测以及我能做些什么(例如突出显示我想要的收藏品的标识符)的一些了解,以给它一个提示。我会看一下Jetbrains网站,如果我发现任何内容,请在这里更新。

2 个答案:

答案 0 :(得分:3)

我真的不太清楚怎么说这个,但你认为你可能要求过多的自动化吗?我的意思是代码片段很好,因为它们减少了重复键入。但是现在你想让它真正猜出你要输入的是什么。它是否应该猜测循环体?

您可能希望通过Developer Express查看CodeRush,它具有更强大的代码生成功能,但我不确定它是否可以执行您的建议。

答案 1 :(得分:1)

使用普通的intellisense键入“ListBox1.Items”,然后按Alt-Enter并选择“使用foreach枚举集合”(不是确切的文本)。

但是,完全是关于ListBox.Items(来自Windows.Forms),它是ObjectCollection类型,它不是强类型的。所以几乎不可能猜出元素的正确类型。对于WPF,Items属性还返回非强类型集合ItemCollection。如果您有强类型或通用集合,ReSharper可以正确推断枚举项类型。