Visual Studio中创建集合后能否自动填充foreach迭代代码?
实现Visual Studio中Foreach自动关联集合的小技巧
嘿,我之前也琢磨过这个需求,其实不用纠结MSDN文档里没找到的条件配置,有两种实用的方法能搞定:
方法一:用VS内置的智能感知(零配置)
VS本身就自带这个贴心功能,可能你没摸对触发方式:
- 当你写好集合声明(比如
var names = new List<string>();)之后,输入foreach,然后连续按两次Tab键 - 这时候VS会自动弹出下拉框,把当前作用域里所有可枚举的集合都列出来,选你要的
names,它直接就生成foreach (var name in names) { },甚至还会自动把元素变量名改成集合名的单数形式,超省心!
方法二:自定义专属代码片段(个性化需求)
如果你想要固定元素命名风格,或者跳过选择直接用最近的集合,可以自己做个代码片段,步骤很简单:
- 打开VS,点顶部菜单栏的「工具」→「代码片段管理器」(或者快捷键
Ctrl+K,Ctrl+B) - 选C#语言,点「导入」,找个你方便保存的位置(比如「我的代码片段」文件夹)
- 新建一个XML文件(比如叫
AutoForeach.snippet),把下面的代码粘进去:
<?xml version="1.0" encoding="utf-8"?> <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> <CodeSnippet Format="1.0.0"> <Header> <Title>Auto Foreach</Title> <Shortcut>foreachauto</Shortcut> <Description>自动生成针对集合的foreach循环</Description> <Author>Your Name</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> </Header> <Snippet> <Declarations> <Literal> <ID>enumerable</ID> <ToolTip>要迭代的集合</ToolTip> <Default>names</Default> <Type>System.Collections.IEnumerable</Type> </Literal> <Literal> <ID>element</ID> <ToolTip>元素变量名</ToolTip> <Default>name</Default> </Literal> </Declarations> <Code Language="csharp"><![CDATA[foreach (var $element$ in $enumerable$) { $end$ }]]> </Code> </Snippet> </CodeSnippet> </CodeSnippets>
- 保存后回到代码片段管理器,导入这个文件就ok了
- 现在写代码的时候,输入
foreachauto然后按Tab,模板就出来了,VS还会自动提示你替换成当前作用域里的集合,按Tab就能切换变量修改
关于你提到的“条件配置”
其实VS代码片段的上下文控制是通过<Context>节点实现的,如果你想让这个片段只在合适的地方触发(比如集合声明之后),可以在<Header>里加一段:
<Context> <ContextType>CodeExpression</ContextType> </Context>
这样它就只会在代码表达式的上下文中可用,不会在类声明或者方法外面乱弹出来~
内容的提问来源于stack exchange,提问作者Lance Parcero
相关产品推荐
相关产品推荐

