在C#中創建代碼片段 - 自定義Visual Studio提高效率
對於使用C#的開發者來說,重複是一個現實。 從撰寫屬性到設置控制台方法和捕獲異常,某些任務可以簡化。 這就是程式片段的用武之地—小型、強大、可重複使用的程式碼塊,您只需通過快捷鍵即可快速插入到專案中。
在本文中,我們將探討如何在Visual Studio中創建和使用自定義的程式片段,由C#專家導師Tim Corey指導。 在他的影片中"Creating Code Snippets in C# – Customize Visual Studio for Efficiency",Tim提供了實際步驟、評論和範例,您可以直接應用到您自己的項目中。 最終,您將能夠提高您的生產力,撰寫更具可讀性的代碼,並在您的開發工作中實施最佳做法。
為什麼程式片段很重要
Tim首先分享了他如何經常使用片段來插入如自動屬性、構造函數和foreach迴圈的內容。 他演示了如何鍵入cw然後雙按Tab鍵以插入Console.WriteLine(),將光標放置在括號之間—這是輸出字串內容的重要技巧。
但正如他所指出的,不是每個有用的方法都有內置的片段。 例如,Console.ReadLine()就缺少一個。 Tim的回答是什麼? 創建您自己的。
在Visual Studio中設置演示專案
為了在上下文中演示,Tim在Visual Studio中設置了一個ASP.NET Core Web應用程式。 儘管專案的類型不是關鍵,但使用C#和HTML文件可以讓他展示兩種語言的範例。
這是一個重要的提醒:片段不限於C#—它們可以應用於Visual Studio所支持的多種語言,包括HTML,XAML等。
內置片段和快捷鍵的威力
Tim演示了一些現有的片段:
-
cw + Tab Tab → Console.WriteLine()
-
ctor + Tab Tab → 構造函數
-
prop + Tab Tab → 自動實現的屬性(例如 public string Test { get; set; })
- propfull → 創建具有支援字段的屬性
這些快捷方式旨在消除重複並提高效能。 您只需指定一種類型,如string或int,一個名稱,其他的讓它自動生成。
這些內置的片段還可以展示插值、存取修飾符如public和系統定義元素—確保您的代碼遵循一致的結構。
在VS Code中創建自己的片段
與其使用片段生成器工具,Tim選擇使用Visual Studio Code,因為它的簡單性和XML的語法高亮。
他創建了一個名為readline.snippet的文件,並展示了必要的XML結構:
<CodeSnippets>
<CodeSnippet Format="1.0.0">
<Header>
<Title>Console.ReadLine</Title>
<Shortcut>cr</Shortcut>
<Description>Creates Console.ReadLine()</Description>
<Author>Tim Corey</Author>
</Header>
<Snippet>
<Code Language="csharp"><!-- [CDATA[
Console.ReadLine();
]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
<CodeSnippets>
<CodeSnippet Format="1.0.0">
<Header>
<Title>Console.ReadLine</Title>
<Shortcut>cr</Shortcut>
<Description>Creates Console.ReadLine()</Description>
<Author>Tim Corey</Author>
</Header>
<Snippet>
<Code Language="csharp"><!-- [CDATA[
Console.ReadLine();
]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
這是一個基本的片段,使用<![CDATA[]]>包裹原始的C#代碼。 快捷鍵cr現在觸發Console.ReadLine()方法的插入,雙按Tab鍵。
Tim指出,格式是從使用者的Visual Studio環境中繼承的,這意味著縮排和間距將符合您的設定。
將片段匯入Visual Studio
Tim介紹了如何使用工具 > 程式碼片段管理器導入.snippet文件。 他選擇了"我的程式碼片段"位置,確保需要時能出現該片段。
匯入後,鍵入cr + Tab Tab插入Console.ReadLine()行,已準備好將其值分配給變量或在異常處理塊中使用。
可重用的文檔標題
接下來,Tim演示了一個文檔片段—這在企業項目或協作團隊中經常需要。 他創建了一個快捷鍵為docme的片段,會生成一個註釋塊:
/// Title:
/// Author:
/// Date:
/// Purpose:
/// Title:
/// Author:
/// Date:
/// Purpose:
這對於跟踪變更、作者身份和文件上下文來說非常理想。 雖然像Git這樣的工具處理版本控制,但標題提供了快速的視覺參考,特別是在大型團隊中。
HTML片段:Bootstrap表單示例
片段並不只適用於C#代碼。 Tim展示了如何在HTML中使用它們—非常適合構建表單、輸入元素和結構化標籤集合。
他複製了一個Bootstrap表單示例,並用相同的XML片段格式包裝,將語言更改為html。 匯入後,鍵入快捷鍵sampleform插入一個即製的HTML結構,省卻了反覆參考外部URLs或複製樣板的麻煩。
帶有佔位符和變數的進階片段
這是事情變得更高級且更強大的地方。 Tim構建了一個片段來檢索配置值:
_config.GetValue<string>("values:myTest");
_config.GetValue<string>("values:myTest");
他展示了如何使用佔位符來表示類型(string,int,bool)和路徑(values:myTest),這樣開發者只需要填寫不同的部分。
在XML中,他使用了:
<Declarations>
<Literal>
<id>ValType</id>
<Default>string</Default>
<ToolTip>Data type of the value</ToolTip>
</Literal>
<Literal>
<id>Path</id>
<Default>values:myTest</Default>
<ToolTip>Config path</ToolTip>
</Literal>
</Declarations>
<Declarations>
<Literal>
<id>ValType</id>
<Default>string</Default>
<ToolTip>Data type of the value</ToolTip>
</Literal>
<Literal>
<id>Path</id>
<Default>values:myTest</Default>
<ToolTip>Config path</ToolTip>
</Literal>
</Declarations>
在片段主體中:
_config.GetValue<$ValType$>("$Path$")
_config.GetValue<$ValType$>("$Path$")
使用變量和聲明允許靈活、表達性且簡潔的代碼生成。 這對於如安全設定檢索、字典存取或從JSON文件中讀取嵌套值等任務來說非常理想。
為什麼程式片段能提高效能
Tim結束時解釋程式片段不僅僅關係到速度—它們促進一致的實踐,減少錯誤,並改善整個團隊的代碼可讀性。 隨著時間的推移,甚至每個片段節省幾秒鐘,都可能累積為幾小時的節省。
他強調片段可以幫助:
-
常見任務初始化
-
使用try-catch-finally的標準化異常處理
-
創建整個類的模板
- 在finally塊中工作、結構化的catch塊和方法重寫
最終想法:開發者的優勢
無論您是在構建復雜的系統還是簡單的應用程式,程式片段都能幫助您更快地一致撰寫C或C#代碼。 它們讓您能夠:
-
消除重複
-
專注於業務邏輯
- 維護乾淨、插值良好且有良好文檔的代碼庫
正如Tim在他全面的影片中建議,探索您自己的編碼習慣。 發現您在哪些地方反覆輸入相同的東西。 然後,決定一種方法:創建一個片段。
您將很快意識到您已改變了工作流程—使開發更高效、組織良好且愉快。
快速程式片段想法,讓您開始
-
tryfinally – 產生try + finally塊
-
logerror – 插入Log.Error()的記錄邏輯
-
propnotify – 屬性與INotifyPropertyChanged
-
filecheck – If File.Exists(path)與內聯邏輯
- foreachdict – 對Dictionary<TKey, TValue>進行循環
Tim的提示:不要只是從其他文件複製貼上—把它做成一個片段,永遠不再重寫。
