C#自定义代码段功能

时间:2011-04-14 12:56:24

标签: visual-studio-2010 code-snippets

我有一个像这样的代码片段结构:

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

中没有看到任何相关内容

如果有可能......怎么样?

5 个答案:

答案 0 :(得分:6)

目前还不可能。看到被拒绝的2010年的这个建议。

http://connect.microsoft.com/VisualStudio/feedback/details/523601/allow-custom-code-snippet-functions

当引入片段时,似乎已经建议使用此功能,并且每个版本都会重新建议,然后拍下来说他们没有足够的时间。

答案 1 :(得分:3)

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

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

并试图怠慢“下划线是一个前缀,前缀是坏的”圣战,我认为它更像是一个约定而不是前缀,就像上面的v。较低的属性v。参数的首字母。在其关联的属性实现之外使用带有前导下划线的字段应该是代码味道。

答案 2 :(得分:1)

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

有这个限制非常烦人,但像许多其他Visual Studio限制一样,Resharper指出它。这是一个性能损失,所以我关闭代码分析操作。然后速度可以接受,而实时模板可以节省大量时间。

还有其他20个充分的理由让一个像LIKE Resharper这样的工具让你成为一个出色的编码器。

我不能再写没有Resharper的“你好世界”...如果没有Reflector = P我就无法调试它

此外,转到Extension Manager并单击“在线图库”。在“搜索”框中键入“代码段”,其中有一些工具看起来像是免费帮助:)。扩展画廊是纯粹的生产力黄金。

答案 3 :(得分:0)

这是不可能的。但我找到了一种有趣的方式来定制"片段"扩展它们。您将连接一个"代码段"其他" Snippets"。当你使用时,只需按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>

答案 4 :(得分:-1)

我还使用并建议使用_前缀作为属性的私有变量。有时我希望Microsoft允许在属性中包含私有变量,如下所示,以防止在属性外部访问。

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