在 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>