2011-04-14 118 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>