2011-04-14 116 views
5

我有一个代码片段的结构如下所示:C#自定义代码段的功能

private $type$ $lowercaseName$; 
    public $type$ $uppercaseName$ 
    { 
     get { return $lowercaseName$; } 
     set { $lowercaseName$ = value; } 
    } 

它产生的东西,如:

private string randomValue; 
    public string RandomValue 
    { 
     get { return randomValue; } 
     set { randomValue = value; } 
    } 

那是一个非常过于简化的版本......它真的复杂得多...以及输入更多信息。如果您可以输入$uppercaseName$,然后自定义代码段函数将值赋予$lowercaseName$,那将会很不错。但是,甚至有可能编写自定义代码片段功能?我在documentation中没有看到这方面的任何内容...

如果有可能......如何?

+0

我希望这是可能的...... AFAIK,事实并非如此。 – SLaks 2011-04-14 12:58:45

+0

在VS2017中封装字段可以使小写字母变成大写字母,但我没有弄清楚如何.. – Alamakanambra 2017-11-11 12:59:04

回答

1

我的回答是Resharper。实时模板。

这是非常烦人的这个限制,但像许多其他Visual Studio的限制,Resharper指甲它。这是一个性能低下的问题,所以我在关闭代码分析的情况下运行。速度可以接受,而实时模板可以节省大量时间。

有大约20个其他很好的理由有一个工具LIKE Resharper让你成为一个梦幻般的编码器。

我不能写的“hello world”没有任何ReSharper的更多信息和反射器= P

我也不能调试它,去扩展管理器,点击在线画廊。在“搜索”框中键入“snippet”,并在那里有几个工具,看起来像他们可能会帮助免费:)。扩展库是纯粹的生产力黄金。

2

我没有使用具有camelCase字段和PascalCase属性的约定,而是采用了使用前导下划线作为后备字段的约定。以下代码片段适用于我。

public $type$ $property$ 
{ 
    get { return _$property$;} 
    set { _$property$ = value;} 
} 
private $type$ _$property$; 
$end$ 

而且在试图冷落的“下划线为前缀和前缀是不好的”神圣的战争,我believ它超过很像上V A前缀的约定。当V性能较低的首字母。参数。任何使用带有前导下划线的字段与其相关的属性实现之外的应该是代码异味。

0

我也使用并推荐使用_前缀作为属性的私有变量。有时我希望微软允许在属性内部对私有变量进行范围限定,如下所示,以防止访问属性。

public string RandomValue 
{ 
    private string randomValue; 
    get { return randomValue; } 
    set { randomValue = value; } 
} 
0

这是不可能的。但我发现了一种有趣的方式来定制扩展它们的“片段”。您将连接一个“片段”和其他“片段”。当您使用时只需按TAB,ENTER,TAB ....

下面是一个简单的例子。 请注意,当您插入片段类时,片段道具将已经选择按TAB。现在想象使用表达式在功能中连接的几个片段

<?xml version="1.0" encoding="utf-8" ?> 
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> 
    <CodeSnippet Format="1.0.0"> 
    <Header> 
     <Title>myclass</Title> 
     <Shortcut>myclass</Shortcut> 
     <Description>Code snippet for class</Description> 
     <Author>Microsoft Corporation</Author> 
     <SnippetTypes> 
     <SnippetType>Expansion</SnippetType> 
     <SnippetType>SurroundsWith</SnippetType> 
     </SnippetTypes> 
    </Header> 
    <Snippet> 
     <Declarations> 
     <Literal> 
      <ID>name</ID> 
      <ToolTip>Class name</ToolTip> 
      <Default>MyClass</Default> 
     </Literal> 
     </Declarations> 
     <Code Language="csharp"> 
     <![CDATA[class $name$ 
    { 
     prop$selected$$end$ 
    }]]> 
     </Code> 
    </Snippet> 
    </CodeSnippet> 
</CodeSnippets>