在 Visual Studio 中,可以使用代码片段将常用代码添加到 C# 代码文件中。 使用代码片段可以更快、更容易且更可靠地编写程序代码。
扩展 代码片段在指定的插入点添加。 环绕代码 片段围绕所选代码添加,仅适用于 C# 和C++。 
代码片段参考
代码片段在 C# 和C++中的工作方式大致相同,但默认代码片段集不同。 默认情况下,Visual Studio 中包括以下 C# 代码片段:
展开表
| 名称或快捷方式 | 说明 | 有效的插入位置 | 
|---|
| #if | 创建 #if 指令和 #endif 指令。 | 任何位置。 | 
| #region | 创建 #region 指令和 #endregion 指令。 | 任何位置。 | 
| ~ | 创建包含类的终结期(析构函数)。 | 在类中。 | 
| attribute | 为派生自 Attribute 的类创建声明。 | 在命名空间(包括全局命名空间)、类或结构中。 | 
| checked | 创建 checked 块。 | 在方法、索引器、属性访问器或事件访问器内。 | 
| class | 创建类声明。 | 在命名空间(包括全局命名空间)、类或结构中。 | 
| ctor | 创建包含类的构造函数。 | 在类中。 | 
| cw | 创建对 WriteLine 的调用。 | 在方法、索引器、属性访问器或事件访问器内。 | 
| do | 创建一个 do while 循环。 | 在方法、索引器、属性访问器或事件访问器内。 | 
| else | 创建 if-else 块。 | 在方法、索引器、属性访问器或事件访问器内。 | 
| 枚举 | 创建枚举声明。 | 在命名空间(包括全局命名空间)、类或结构中。 | 
| equals | 创建一个方法声明,该声明对 Object 类中定义的 Equals 方法进行重写。 | 在类或结构中。 | 
| exception | 为某个从异常(默认情况下为 Exception)派生的类创建声明。 | 在命名空间(包括全局命名空间)、类或结构中。 | 
| for | 创建 for 循环。 | 在方法、索引器、属性访问器或事件访问器内。 | 
| foreach | 创建 foreach 循环。 | 在方法、索引器、属性访问器或事件访问器内。 | 
| forr | 创建 for 循环,每次迭代后会减少循环变量。 | 在方法、索引器、属性访问器或事件访问器内。 | 
| if | 创建 if 块。 | 在方法、索引器、属性访问器或事件访问器内。 | 
| 索引器 | 创建索引器声明。 | 在类或结构中。 | 
| interface | 创建接口声明。 | 在命名空间(包括全局命名空间)、类或结构中。 | 
| invoke | 创建安全调用事件的块。 | 在方法、索引器、属性访问器或事件访问器内。 | 
| iterator | 创建迭代器。 | 在类或结构中。 | 
| iterindex | named使用嵌套类创建迭代器和索引器对。 | 在类或结构中。 | 
| lock | 创建 lock 块。 | 在方法、索引器、属性访问器或事件访问器内。 | 
| mbox | 创建对 System.Windows.Forms.MessageBox.Show 的调用。 可能需要添加对System.Windows.Forms.dll的引用。 | 在方法、索引器、属性访问器或事件访问器内。 | 
| 命名空间 | 创建命名空间声明。 | 在命名空间内,包括全局命名空间。 | 
| prop | 创建自动 实现的属性 声明。 | 在类或结构中。 | 
| propfull | 创建具有 get和set访问器的属性声明。 | 在类或结构中。 | 
| propg | 使用专用 set访问器创建只读自动实现属性。 | 在类或结构中。 | 
| sim | 创建 static int Main 方法声明。 | 在类或结构中。 | 
| struct | 创建结构声明。 | 在命名空间(包括全局命名空间)、类或结构中。 | 
| svm | 创建 static void Main 方法声明。 | 在类或结构中。 | 
| 开关 | 创建 switch 块。 | 在方法、索引器、属性访问器或事件访问器内。 | 
| 尝试 | 创建 try-catch 块。 | 在方法、索引器、属性访问器或事件访问器内。 | 
| tryf | 创建 try-finally 块。 | 在方法、索引器、属性访问器或事件访问器内。 | 
| unchecked | 创建 unchecked 块。 | 在方法、索引器、属性访问器或事件访问器内。 | 
| unsafe | 创建 unsafe 块。 | 在方法、索引器、属性访问器或事件访问器内。 | 
| using | 创建 using 指令。 | 在命名空间内,包括全局命名空间。 | 
| while | 创建 while 循环。 | 在方法、索引器、属性访问器或事件访问器内。 | 
C# 代码片段函数
函数在代码片段的 Function 元素中指定。 下表描述了可用于 C# 代码片段中的元素的 Function 三个函数。
展开表
| 函数 | 说明 | 
|---|
| GenerateSwitchCases(EnumerationLiteral) | 为 EnumerationLiteral参数指定的枚举成员生成一个switch 语句和一组 case 语句。 该EnumerationLiteral参数必须是对枚举文本或枚举类型的引用。 | 
| ClassName() | 返回包含插入的代码片段的类的名称。 | 
| SimpleTypeName(TypeName) | 将 TypeName参数减少为调用代码片段的上下文中最简单的形式。 | 
GenerateSwitchCases 示例
以下示例演示如何使用 GenerateSwitchCases 函数。 插入此代码片段并将枚举输入文本中 $switch_on$ 时,文本 $cases$ 将为枚举中的每个值生成一个 case 语句。
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>switch</Title>
            <Shortcut>switch</Shortcut>
            <Description>Code snippet for switch statement</Description>
            <Author>Microsoft Corporation</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
                <Literal>
                    <ID>expression</ID>
                    <ToolTip>Expression to switch on</ToolTip>
                    <Default>switch_on</Default>
                </Literal>
                <Literal Editable="false">
                    <ID>cases</ID>
                    <Function>GenerateSwitchCases($expression$)</Function>
                    <Default>default:</Default>
                </Literal>
            </Declarations>
            <Code Language="csharp">
                <![CDATA[
                    switch ($expression$)
                    {
                        $cases$
                    }
                ]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>ClassName 示例
以下示例演示如何使用 ClassName 函数。 插入此代码片段时, $classname$ 文本将替换为代码文件中该位置的封闭类的名称。
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>Common constructor pattern</Title>
            <Shortcut>ctor</Shortcut>
            <Description>Code Snippet for a constructor</Description>
            <Author>Microsoft Corporation</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
                <Literal>
                    <ID>type</ID>
                    <Default>int</Default>
                </Literal>
                <Literal>
                    <ID>name</ID>
                    <Default>field</Default>
                </Literal>
                <Literal default="true" Editable="false">
                    <ID>classname</ID>
                    <ToolTip>Class name</ToolTip>
                    <Function>ClassName()</Function>
                    <Default>ClassNamePlaceholder</Default>
                </Literal>
            </Declarations>
            <Code Language="csharp" Format="CData">
                <![CDATA[
                    public $classname$ ($type$ $name$)
                    {
                        this._$name$ = $name$;
                    }
                    private $type$ _$name$;
                ]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>SimpleTypeName 示例
此示例演示如何使用 SimpleTypeName 函数。 将此代码片段插入代码文件中时,文本 $SystemConsole$ 将替换为调用代码片段的上下文中类型的最简单形式 Console 。
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>Console_WriteLine</Title>
            <Shortcut>cw</Shortcut>
            <Description>Code snippet for Console.WriteLine</Description>
            <Author>Microsoft Corporation</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
                <Literal Editable="false">
                    <ID>SystemConsole</ID>
                    <Function>SimpleTypeName(global::System.Console)</Function>
                </Literal>
            </Declarations>
            <Code Language="csharp">
                <![CDATA[
                    $SystemConsole$.WriteLine();
                ]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>