在 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创建迭代器。在类或结构中。
iterindexnamed使用嵌套类创建迭代器和索引器对。在类或结构中。
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>