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 | 创建具有 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>