C# 代码片段

在 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 创建具有 getset 访问器的属性声明。 在类或结构中。
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>