Visual Studio 中的Code Snippet(代码片段)功能介绍

1、Code Snippet(代码片段)功能介绍

平常我们在使用Visual Studio 进行开发时,可以看到Intellisense提示如下内容

这种就是代码片段的提示。如输入cw后,按两次Tab键,即可输入Console.WriteLine();

代码片段是小块可重用代码,可通过右键单击菜单(关联菜单)命令或热键组合插入到代码文件中。 

2、Visual Studio 中预置的代码片段(C#)

代码片段功能可用位置
#if创建 #if 指令和 #endif 指令。任何位置。
#region创建 #region 指令和 #endregion 指令。任何位置。
~创建包含类的终结期(析构函数)。在类中。
attribute为派生自 Attribute 的类创建声明。在命名空间(包括全局命名空间)、类或结构中。
checked创建 checked 块。在方法、索引器、属性访问器或事件访问器内。
class创建类声明。在命名空间(包括全局命名空间)、类或结构中。
ctor创建包含类的构造函数。在类中。
cw创建对 WriteLine 的调用。在方法、索引器、属性访问器或事件访问器内。
do创建 do while 循环。在方法、索引器、属性访问器或事件访问器内。
else创建 else 块。在方法、索引器、属性访问器或事件访问器内。
enum创建枚举声明。在命名空间(包括全局命名空间)、类或结构中。
equal创建一个方法声明,该声明对 Object 类中定义的 Equals 方法进行重写。在类或结构中。
exception为某个从异常(默认情况下为 Exception)派生的类创建声明。在命名空间(包括全局命名空间)、类或结构中。
for创建 for 循环。在方法、索引器、属性访问器或事件访问器内。
foreach创建 foreach 循环。在方法、索引器、属性访问器或事件访问器内。
forr创建 for 循环,每次迭代后会减少循环变量。在方法、索引器、属性访问器或事件访问器内。
if创建 if 块。在方法、索引器、属性访问器或事件访问器内。
indexer创建索引器声明。在类或结构中。
interface创建接口声明。在命名空间(包括全局命名空间)、类或结构中。
invoke创建安全调用事件的块。在方法、索引器、属性访问器或事件访问器内。
iterator创建迭代器。在类或结构中。
iterindex使用嵌套类创建“已命名”迭代器和索引器对。在类或结构中。
lock创建 lock 块。在方法、索引器、属性访问器或事件访问器内。
mbox创建对 System.Windows.Forms.MessageBox.Show 的调用。 可能还需要添加对 System.Windows.Forms.dll 的引用 。在方法、索引器、属性访问器或事件访问器内。
namespace创建命名空间声明。在命名空间(包括全局命名空间)中。
prop创建自动实现的属性声明。在类或结构中。
propfull创建具有 get 和 set 访问器的属性声明。在类或结构中。
propg创建具有专用 set 访问器的只读自动实现的属性。在类或结构中。
sim创建 static int Main 方法声明。在类或结构中。
struct创建结构声明。在命名空间(包括全局命名空间)、类或结构中。
svm创建 static void Main 方法声明。在类或结构中。
switch创建 switch 块。在方法、索引器、属性访问器或事件访问器内。
try创建 try-catch 块。在方法、索引器、属性访问器或事件访问器内。
tryf创建 try-finally 块。在方法、索引器、属性访问器或事件访问器内。
unchecked创建 unchecked 块。在方法、索引器、属性访问器或事件访问器内。
unsafe创建 unsafe 块。在方法、索引器、属性访问器或事件访问器内。
using创建 using 指令。在命名空间(包括全局命名空间)中。
while创建 while 循环。在方法、索引器、属性访问器或事件访问器内。

3、创建代码片段

创建代码片段的基本格式如下:

 1 <?xml version="1.0" encoding="utf-8"?>2 <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">3     <CodeSnippet Format="1.0.0">4         <Header>5             <Title></Title>6           <Shortcut></Shortcut>7           <Description></Description>8           <Author></Author>9         </Header>
10         <Snippet>
11             <Code Language="">
12                 <![CDATA[]]>
13             </Code>
14         </Snippet>
15     </CodeSnippet>
16 </CodeSnippets>

这里我们创建一个输入当前时间的代码片段,简写为 dt

使用Visual Studio 创建一个XML文档,内容如下:

 1 <?xml version="1.0" encoding="utf-8"?>2  <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">3      <CodeSnippet Format="1.0.0">4          <Header>5             <Title>dt</Title>6            <Shortcut>dt</Shortcut>7            <Description>DateTime.Now的代码片段</Description>8            <Author>zhaotianff</Author>9          </Header>
10          <Snippet>
11             <Declarations>
12                 <Literal>
13                     <ID>expression</ID>
14                     <ToolTip>日期类型</ToolTip>
15                     <Function>SimpleTypeName(global::System.DateTime)</Function>
16                 </Literal>
17                 <Literal>
18                     <ID>dt</ID>
19                     <ToolTip>变量名</ToolTip>
20                     <Default>dt</Default>
21                 </Literal>
22             </Declarations>
23             <Code Language="csharp"><![CDATA[var $dt$ = $expression$.Now;$end$]]>
24             </Code>
25         </Snippet>
26      </CodeSnippet>
27  </CodeSnippets>

格式说明:

Header:用于指定有关 IntelliSense 代码段的常规信息

Title:代码段的友好名称

Shortcut:快捷输入文本,这里用的是 dt

Description:描述。这会显示在Visual Studio的提示上,在后面的截图可以看到

Author:作者

Snippet :指定代码片段的引用、导入、声明以及代码内容

Declarations:声明字面量或对象

Literal:定义可以编辑的代码段的文本(字面量)

ID :指定字面量的唯一标识符(这个元素是必需的)

Default :指定插入代码段时字面量的默认值(这个元素是必需的)

Function :元素 指定当文本在 Visual Studio 中获得焦点时要执行的函数

ToolTip :元素 用于描述文本的预期值和用法

最关键的就是Code元素,在这里定义代码片段中的代码内容。

Code元素有两个保留的关键字:$end$ 和 $selected$

$end$ 标记在插入代码段之后用于放置光标的位置。

$selected$ 表示在文档中选择的要在调用时插入代码段的文本(如果定义了字面量,会直接选择字面量,当按下回车后,会跳到$selected$的位置)

Code元素支持三种属性

Language:用于标识当前的代码片段用于哪种编程语言,可选项(VB、CSharp、CPP、XAML、XML、JavaScrip、TypeScript、SQL、HTML)(这个选项是必需的)

Kind:用于标识 代码片段可以用于哪个位置。(这个属性是可选的)

method body(用于方法内部)、method decl (用于方法定义)、type decl (用于类型定义)、file (完整的代码定义,可用于任何位置)、any(任何位置)

$:分隔符,可以描述字面量或对象

示例代码说明

在示例代码中定义了两个字面量

 1 <Literal>2     <ID>expression</ID>3     <ToolTip>日期类型</ToolTip>4     <Function>SimpleTypeName(global::System.DateTime)</Function>5 </Literal>6 <Literal>7      <ID>dt</ID>8      <ToolTip>变量名</ToolTip>9      <Default>dt</Default>
10 </Literal>

第一个使用了Function元素,代表这里会执行System.DateTime

第二个是一个可选输入,使用了Default元素来标识默认值

1 <Code Language="csharp"><![CDATA[var $dt$ = $expression$.Now;$end$]]>

Code元素中,指定语言为CSharp,在<![CDATA[...]]>中输入代码片段 var $dt$ = $expression$.Now;$end$

$dt$是前面定义的字面量,按下Tab键后,会自动选中该值

$expression$是前面定义的字面量,代表System.DateTime

$end$代表代码片段结束后,光标所在的位置 

这里我们再对照VS内置的if代码片段来进行说明,定义如下:

 1 <?xml version="1.0" encoding="utf-8"?>2 <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">3     <CodeSnippet Format="1.0.0">4         <Header>5             <Title>if</Title>6             <Shortcut>if</Shortcut>7             <Description>if 语句的代码片段</Description>8             <Author>Microsoft Corporation</Author>9             <SnippetTypes>
10                 <SnippetType>Expansion</SnippetType>
11                 <SnippetType>SurroundsWith</SnippetType>
12             </SnippetTypes>
13         </Header>
14         <Snippet>
15             <Declarations>
16                 <Literal>
17                     <ID>expression</ID>
18                     <ToolTip>要计算的表达式</ToolTip>
19                     <Default>true</Default>
20                 </Literal>
21             </Declarations>
22             <Code Language="csharp"><![CDATA[if ($expression$)
23     {
24         $selected$ $end$
25     }]]>
26             </Code>
27         </Snippet>
28     </CodeSnippet>
29 </CodeSnippets>

当输入if代码片段后,可以看到如下:

定义的字面量$expression$会被选中,修改后,按下回车,会跳到$selected$的位置。

这里还有一个元素,在上面的介绍中没有涉及到。

那就是Header元素下的SnippetType元素,该元素用于指定 Visual Studio 如何插入代码段。如果未指定,刚代表可以在任何位置插入。

SnippetType元素可以重复使用。可选值如下:

SurroundsWith允许将代码段放置在一段选定的代码周围。

Expansion允许将代码段插入到光标处。

Refactoring指定在 C# 重构过程中使用代码片段。 不能在自定义代码段中使用 Refactoring

4、管理代码片段

在工具菜单下,选择【代码片段管理器】项,可以打开代码片段管理器。

在这里可以管理已有的代码片段,也可以添加新的代码片段。

保存上面示例代码为dt.snippet文件

打开代码片段管理,点击添加,选择刚刚保存的dt.snippet文件

由于使用了 Language="csharp" 来标识 ,所以会自动放到CSharp类别下,并且会自动钩选 【My Code Snippets】文件夹。

5、使用导入的代码片段

输入 dt ,可以看到Visual Studio的提示。

按两下Tab键,即可以快速输入

1 var dt = DateTime.Now;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/396347.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch深度学习框架

最近放假在超星总部河北燕郊园区实习&#xff0c;本来是搞前后端开发岗位的&#xff0c;然后带我的副总老大哥比较关照我&#xff0c;了解我的情况后得知我大三选的方向是大数据&#xff0c;于是建议我学学python、Hadoop&#xff0c;Hadoop我看了一下内容比较多&#xff0c;而…

Kafka生产者(二)

1、生产者消息发送流程 1.1 发送原理 在消息发送的过程中&#xff0c;涉及到了两个线程——main 线程和 Sender 线程。在 main 线程中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给 RecordAccumulator&#xff0c;Sender 线程不断从 RecordAccumulator 中拉取…

剖析算法内部结构----------贪心算法

什么是贪心算法&#xff1f; 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在问题求解过程中&#xff0c;每一步都采取当前状态下最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致最终的全局最优解的算法策略。 贪心算法的核心思想是做选择时&…

StringJoiner更优雅创建含分隔符的字符序列

文章目录 1 why2 what3 how4 练习手段 1 why StringBuilder拼接包含分隔符的字符序列时&#xff0c;分隔符需要一个一个添加&#xff0c;或者需要手动删除末尾冗余的分隔符&#xff0c;代码不美观&#xff0c;不好看。 比如&#xff0c;单个字符串依次拼接时&#xff1a; Stri…

[io]进程间通信 -信号函数 —信号处理过程

sighandler_t signal(int signum, sighandler_t handler); 功能&#xff1a; 信号处理函数 参数&#xff1a; signum&#xff1a;要处理的信号 handler&#xff1a;信号处理方式 SIG_IGN&#xff1a;忽略信号 SIG_DFL&#xff1a;执行默认操作 handler&#xff1a;捕捉信 …

Ubuntu 无法进行SSH连接,开启22端口

我们在VM中安装好Ubuntu 虚拟机后&#xff0c;经常需要使用Xshell等工具进行远程连接&#xff0c;但是会出现无法连接的问题&#xff0c;原因是Ubuntu中默认关闭了SSH 服务。 1、 查看Ubuntu虚拟机IP地址 2、 利用Tabby等工具进行远程连接 命令&#xff1a;ssh ip地址 这里就是…

Ubuntu 20.04 中安装 Nginx (通过传包编译的方式)、开启关闭防火墙、开放端口号

文章目录 前言一、安装包下载二、上传服务器并解压缩三、依赖配置安装四、生成编译脚本五、编译六、查看是否编译完成七、开始安装八、查看是否安装成功九、设置为开机自启动 前言 参考大佬文章并在基础上做了点修改&#xff0c;发篇文章记录下 防止下次遇到。 参考文章&#…

leetcode169. 多数元素,摩尔投票法附证明

leetcode169. 多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输…

Animate软件基本概念:基本工具、工作区和颜色

在我们之前的教程中&#xff0c;有不少同学都在纠结为什么没有讲一些基本概念&#xff0c;其实我们在使用Animate软件时&#xff0c;很少会考虑某一个工具为什么这么称呼&#xff0c;它的原理又是什么&#xff0c;毕竟Animate软件只是工具。而且我们从Flash软件到现在Animate软…

008 | 基于RNN和LSTM的贵州茅台股票开盘价预测

基于RNN和LSTM的贵州茅台股票开盘价预测 项目简介&#xff1a; 本项目旨在通过使用Tushare下载贵州茅台的股票数据&#xff0c;并基于这些历史数据&#xff0c;使用TensorFlow 2.0实现循环神经网络&#xff08;RNN&#xff09;和长短期记忆网络&#xff08;LSTM&#xff09;来…

H3C MSR NAT66配置指北

正文共&#xff1a;1456 字 14 图&#xff0c;预估阅读时间&#xff1a;1 分钟 通过前面的介绍&#xff08;企业路由器配置IPv6家用宽带的PPPoE拨号示例&#xff09;&#xff0c;想必你已经可以实现让MSR路由器通过PPPoE拨号接入IPv6网络。 正常来讲&#xff0c;通过前面的配置…

Qt自定义TreeWidget,实现展开折叠按钮在右侧,且一条竖直线上对齐

效果如下&#xff1a; 图片随便找的&#xff0c;可能需要调下样式&#xff0c;代码复制可用&#xff0c;留给有需要的人。 #ifndef CustomTreeWidget_h__ #define CustomTreeWidget_h__#include <QTreeWidget> #include <QPushButton>class CCustomTreeWidget : p…

Java数据结构(六)——树和二叉树

文章目录 二叉树树初识树有关树的概念树的表示树的应用 二叉树二叉树的概念二叉树的性质二叉树的存储二叉树的遍历二叉树的操作(代码实现)遍历结点数二叉树高度查找 二叉树的相关练习对称二叉树平衡二叉树二叉树的构建及遍历前序和中序构造二叉树最近的公共祖先二叉树构建字符串…

redis的安装与命令

一、redis与memcache总体对比 1.性能 Redis&#xff1a;只使用单核&#xff0c;平均每一个核上Redis在存储小数据时比Memcached性能更高。 Memcached&#xff1a;可以使用多核&#xff0c;而在100k以上的数据中&#xff0c;Memcached性能要高于Redis。 2.内存使用效率 Mem…

【C#】计算多边形的面积

一、问题分析 在 C# 中计算多边形面积的一种常见方法是使用顶点坐标。 假设您有一个由一系列 (x, y) 顶点坐标定义的多边形&#xff0c;您可以使用“鞋带公式”&#xff08;也称为高斯公式&#xff09;来计算其面积。 如果是计算多边形的面积可以分为正常多边形、dicom图像中…

java之贪婪爬取和非贪婪爬取

public class RegexDemo6 {public static void main(String[] args) {String str"java自从95年问世以来,abbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaa" " 经历了很多版本,目前企业中用的最多是java8和java11,""因为这俩个是长期版本,下一个长期支持版本是java…

【平衡二叉树】数据结构—平衡二叉树

平衡二叉树&#xff08;Balanced Binary Tree&#xff09;是一种特殊的二叉树&#xff0c;它的左右子树的高度差不超过1&#xff0c;这样可以保证树的高度相对较低&#xff0c;从而使得查找、插入和删除操作的时间复杂度保持在 。 平衡二叉树的基本概念 1. 二叉树&#xff1a…

RTT-网络组件-AT命令-未完成

AT指令文档 调用树 at_client_init();at_client_para_init();client_parser();struct at_client {rt_device_t device;at_status_t status;char end_sign;char *send_buf;/* The maximum supported send cmd length */rt_size_t send_bufsz;/* The length of last cmd */rt_si…

【HBZ分享】Spring启动时核心refresh方法流程

refresh核心代码所在位置 在AbstractApplicationContext类中的refresh方法中 refresh的业务流程编排 调用obtainFreshBeanFactory()去创建一个全新的BeanFactory工厂&#xff0c;类型为DefaultListableBeanFctory&#xff0c;其功能为【解析xml】将里面bean标签内容解析成【…

尚硅谷谷粒商城项目笔记——十、调试前端项目renren-fast-vue【电脑CPU:AMD】

十、调试前端项目renren-fast-vue 如果遇到其他问题发在评论区&#xff0c;我看到后解决 1 先下载安装git git官网下载地址 2 登录gitee搜索人人开源找到renren-fast-vue复制下载链接。【网课视频中也有详细步骤】 3 下载完成后桌面会出现renren-fast-vue的文件夹 4 开始调…