🚀 在 VS Code 中取得

C# 快速動作與重構

Visual Studio Code 提供多種重構原始碼的方式,以及在您撰寫程式碼時產生程式碼和修正問題的快速修正。若要存取這些功能,請按一下出現的「燈泡」圖示,或使用「快速修正」命令 ⌘. (Windows、Linux Ctrl+.) 來顯示快速修正和重構選項的清單。您也可以在編輯器上按一下滑鼠右鍵,然後選取 [重構] ⌃⇧R (Windows、Linux Ctrl+Shift+R),只顯示重構選項。

支援的重構與快速修正

新增 await

用途:await 關鍵字新增至函式呼叫。

時機:當您在非同步方法中呼叫函式時。

操作方式

  1. 將插入號放在函式呼叫旁 (很可能以紅色底線標示)。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [新增 await]。

Add await example

從成員新增建構函式參數

用途:根據選取的類別成員產生具有參數的新建構函式。

時機:您引入新的建構函式,並想要使用所有正確的參數自動正確宣告它。

原因:您可以在使用建構函式之前宣告它,但此功能會自動產生它。

操作方式

  1. 醒目提示您想要在建構函式中新增為參數的類別成員。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [產生建構函式 <類別名稱>(<成員型別>、<成員型別>、<等等>)]。

Add constructor parameters from members example

新增 DebuggerDisplay 屬性

用途:DebuggerDisplay 屬性控制物件、屬性或欄位在偵錯工具變數視窗中的顯示方式。

時機:您想要在程式碼中以程式設計方式在偵錯工具內 釘選屬性

原因:釘選屬性可讓您透過將屬性泡泡化至偵錯工具內物件屬性清單的頂端,藉此依屬性快速檢查物件。

操作方式

  1. 將游標放在型別、委派、屬性或欄位上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表,然後選取 [新增 DebuggerDisplay 屬性]。
  3. 已新增 DebuggerDisplay 屬性以及傳回預設 ToString() 的自動方法。

Add DebuggerDisplay attribute example

新增明確轉換

用途:可讓您根據使用方式,自動將明確轉換新增至運算式。

時機:您需要將明確轉換新增至運算式,並想要自動正確地指派它。

原因:您可以手動將明確轉換新增至運算式,但此功能會根據程式碼內容自動新增它。

操作方式

  1. 將插入號放在錯誤上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [新增明確轉換]。

新增檔案標頭

用途:使用 EditorConfig 將檔案標頭新增至現有的檔案、專案和方案。

時機:您想要輕鬆地將檔案標頭新增至檔案、專案和方案。

原因:您的團隊要求您包含檔案標頭以用於著作權用途。

操作方式

  1. 如果您還沒有 EditorConfig,請將一個新增至專案或方案。
  2. 將下列規則新增至您的 EditorConfig 檔案:file_header_template
  3. 將規則的值設定為等於您想要套用的標頭文字。您可以使用 {fileName} 作為檔案名稱的預留位置。
  4. 將插入號放在任何 C# 檔案的第一行。
  5. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  6. 選取 [新增檔案標頭]。

新增遺失的 using / imports

用途:可讓您立即為複製並貼上的程式碼新增必要的 imports 或 using 指示詞。

時機:從專案中或從其他來源複製程式碼並將其貼到新程式碼中是很常見的做法。此快速動作會尋找複製並貼上的程式碼中遺失的 imports 指示詞,然後提示您新增這些指示詞。此程式碼修正也可以新增從專案到專案的參考。

原因:由於快速動作會自動新增必要的 imports,因此您不需要手動複製程式碼所需的 using 指示詞。

操作方式

  1. 從檔案複製程式碼,並將其貼到新檔案中,而不要包含必要的 using 指示詞。產生的錯誤會隨附一個程式碼修正,可新增遺失的 using 指示詞。
  2. 選取 ⌘. (Windows、Linux Ctrl+.)以開啟 [快速動作與重構] 功能表。
  3. 選取 [Using <您的參考>] 以新增遺失的參考。

Add missing  / imports example

新增具名引數

用途:將具名引數附加至函式呼叫中指定的參數值。

時機:如果您有一個具有許多參數的方法,您可以新增具名引數,讓您的程式碼更具可讀性。

操作方式

  1. 將游標放在函式呼叫中的參數內。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [新增引數名稱 <參數名稱>]。

Add named argument example

將匿名型別轉換為類別

用途:將匿名型別轉換為類別。

時機:您有一個想要在類別中繼續建置的匿名型別。

原因:如果您只在本機使用匿名型別,則匿名型別非常有用。隨著程式碼成長,最好有一個簡單的方法將它們升級為類別。

操作方式

  1. 將游標放在匿名 (var) 型別中。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [轉換為類別]。

Convert anonymous type to class example

在自動屬性與完整屬性之間轉換

用途:在自動實作屬性與完整屬性之間轉換。

時機:屬性的邏輯已變更。

原因:您可以手動在自動實作屬性與完整屬性之間轉換,但此功能會自動為您完成工作。

操作方式

  1. 將游標放在屬性名稱上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 從下列兩個選項中選取

選取 [轉換為完整屬性]。

Convert to full property example

選取 [使用自動屬性]。

Use auto property example

在直接轉換與 'as' 運算式之間轉換

用途:使用 as 關鍵字在一般轉換和嘗試轉換之間轉換變數。

時機:當您預期轉換在特定案例 (as) 下失敗,或您從不預期轉換會失敗 (直接轉換) 時。

操作方式

  1. 將游標放在變數上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 從下列兩個選項中選取

選取 [變更為轉換]。

Change to cast example

選取 [變更為 as 運算式]。

Change to  expression example

在 for 迴圈與 foreach 陳述式之間轉換

用途:如果您的程式碼中有 for 迴圈,您可以使用此重構將其轉換為 foreach 陳述式。

原因:您可能想要將 for 迴圈轉換為 foreach 陳述式的原因包括

  • 您不會在迴圈內使用區域迴圈變數,除非作為索引來存取項目。
  • 您想要簡化程式碼,並降低在初始設定式、條件和迭代器區段中發生邏輯錯誤的可能性。

您可能想要將 foreach 陳述式轉換為 for 迴圈的原因包括

  • 您想要在迴圈內使用區域迴圈變數,而不僅僅是存取項目。
  • 您正在逐一查看多維陣列,而且您想要更精確地控制陣列元素。

操作方式

  1. 將插入號放在 foreachfor 關鍵字中。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 從下列兩個選項中選取

選取 [轉換為 for]。

Convert to  example

選取 [轉換為 foreach]。

Convert to

在 Get 方法與屬性之間轉換

將 Get 方法轉換為屬性

用途:可讓您將 Get 方法轉換為屬性 (以及選擇性的 Set 方法)。

時機:您有一個不包含任何邏輯的 Get 方法。

操作方式

  1. 將游標放在 Get 方法名稱中。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. (選用) 如果您有 Set 方法,您也可以在此時轉換 Set 方法。選取 [以屬性取代 <Get 方法或 Set 方法名稱>]。

Replace Get method with property example

將屬性轉換為 Get 方法

用途:可讓您將屬性轉換為 Get 方法

時機:您有一個屬性,其中牽涉到不只是立即設定和取得值

操作方式

  1. 將游標放在 Get 方法名稱中。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [以方法取代 <屬性名稱>]。

Replace property name with method example

在 if 與 switch 陳述式之間轉換

用途:if 陳述式轉換為 switch 陳述式或 C# 8.0 switch 運算式

時機:您想要將 if 陳述式轉換為 switch 陳述式或 switch 運算式,反之亦然。

原因:如果您正在使用 if 陳述式,此重構可讓您輕鬆轉換為 switch 陳述式或 switch 運算式。

操作方式

  1. 將游標放在 if 關鍵字中。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 從下列選項中選取

選取 [轉換為 switch 陳述式]。

Convert to  statement example

選取 [轉換為 switch 運算式]。

Convert to  expression example

選取 [轉換為 if 陳述式]。

Convert to  statement example

在一般字串與逐字字串之間轉換

用途:可讓您在一般字串和逐字字串常值之間轉換。

時機:您想要節省空間或在程式碼中提供更清晰的說明。

原因:將逐字字串常值轉換為一般字串常值有助於節省空間。將一般字串常值轉換為逐字字串常值可以提供更清晰的說明。

操作方式

  1. 將插入號放在一般字串或逐字字串常值上
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 從下列其中一個選項中選取

選取 [轉換為一般字串]。

選取 [轉換為逐字字串]。

將類別轉換為記錄

用途:將您的類別轉換為 C# 記錄。

時機:當您想要快速將類別變更為記錄時,記錄是專為儲存資料和不可變性所設計。

操作方式

  1. 將游標放在類別名稱上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [轉換為位置記錄]。

Convert class to record before example

Convert class to record after example

將區域函式轉換為方法

用途:將區域函式轉換為方法。

時機:您有一個想要在目前區域內容外部定義的區域函式。

原因:您想要將區域函式轉換為方法,以便您可以在區域內容外部呼叫它。當您的區域函式變得太長時,您可能會想要轉換為方法。當您在個別方法中定義函式時,您的程式碼會更容易閱讀。

操作方式

  1. 將游標放在區域函式中。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [轉換為方法]。

Convert local function to method example

將數值常值轉換為十六進位、十進位或二進位數字

用途:在十六進位、二進位或十進位數字之間轉換數字。

時機:當您想要自動將數字轉換為所需的基底,而不需要手動計算轉換時使用。

操作方式

  1. 將游標放在數值常值上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取下列其中一個選項

選取 [轉換為十進位]。

Convert to decimal example

選取 [轉換為十六進位]。

Convert to hex example

選取 [轉換為二進位]。

Convert to binary example

將預留位置轉換為內插字串

用途:String.Format 格式化的結果字串 (或預留位置) 轉換為內插字串。

時機:當您想要快速使用內插字串時使用。

原因:內插字串可以為您提供更具可讀性的 String.Format 版本,而且可讓您直接存取變數名稱。

操作方式

  1. 將游標放在 String.Format 預留位置上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [轉換為內插字串]。

Convert placeholder to interpolated string example

將一般字串轉換為內插字串

用途:將一般字串變更為內插字串。

時機:當您想要清理程式碼並使其更具可讀性時使用。

操作方式

  1. 將游標放在您想要轉換的字串上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [轉換為內插字串]。

Convert to interpolated string before example

Convert to interpolated string after example

將 Tuple 轉換為 Struct

用途:將您的 Tuple 轉換為 Struct

時機:當您想要快速將 Tuple 變更為 Struct,而且想要擁有您想要多次存取的固定資料時使用。

操作方式

  1. 將游標放在 Tuple 上。

  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。

  3. 選取下列其中一個選項

    • 選取 [轉換為 Struct -> 更新包含成員中的用法]
    • 選取 [轉換為 Struct -> 更新包含型別中的用法]
    • 選取 [轉換為 Struct -> 更新包含專案中的用法]
    • 選取 [轉換為 Struct -> 更新相依專案中的用法]

Convert tuple to  options

Convert tuple to  example

封裝欄位

用途:可讓您將欄位轉換為屬性,並更新該欄位的所有用法以使用新建立的屬性。

時機:您想要將欄位移至屬性,並更新對該欄位的所有參考。

原因:您想要讓其他類別存取欄位,但不想要這些類別直接存取。例如,藉由將欄位包裝在屬性中,您可以撰寫程式碼來驗證正在指派的值。

操作方式

  1. 將游標放在要封裝的欄位名稱內。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取下列其中一個

選取 [封裝欄位: <欄位名稱> (並使用屬性)]。

Encapsulate field and use property example

選取 [封裝欄位: <欄位名稱> (但仍使用欄位)]。

Encapsulate field but still use field example

產生比較運算子

用途:可讓您為實作 IComparable 的型別產生比較運算子。

時機:您有一個實作 IComparable 的型別,我們會自動新增比較運算子。

原因:如果您要實作值型別,則應考慮覆寫 Equals 方法,以獲得比 ValueTypeEquals 方法的預設實作更高的效能。

操作方式

  1. 將游標放在類別內或 IComparable 關鍵字上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 從下拉式功能表中選取 [產生比較運算子]。

產生預設建構函式

用途:可讓您立即產生類別上新預設建構函式的程式碼。

時機:您引入新的預設建構函式,並想要自動正確宣告它。

原因:您可以在使用建構函式之前宣告它,但此功能會自動產生它。

操作方式

  1. 將游標放在類別名稱上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [產生建構函式 <類別名稱>()]。

Generate default constructor example

產生參數

用途:自動產生方法參數。

時機:您在方法中參考目前內容中不存在的變數並收到錯誤;您可以產生參數作為程式碼修正。

原因:您可以快速修改方法簽章,而不會遺失內容。

操作方式

  1. 將游標放在變數名稱中。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [產生參數]。

Generate parameter example

明確實作所有成員

用途:在類別中明確定義介面的方法。明確介面實作是只能透過指定的介面呼叫的類別成員。

時機:當您

  • 不希望針對多個介面呼叫相同的實作。
  • 想要解決兩個介面各自宣告相同名稱的不同成員 (例如屬性和方法) 的案例。

操作方式

  1. 將游標放在類別中實作的介面上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [明確實作所有成員]

Implement all members explicitly example

隱含實作所有成員

用途:在類別中隱含定義介面的方法。隱含介面實作是指介面的方法和屬性直接以公用方法的形式新增至類別。

操作方式

  1. 將游標放在類別中實作的介面上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [實作介面]

Implement all members implicitly

內嵌方法

用途:內嵌方法重構。

時機:您想要將單一陳述式主體內的靜態、執行個體和擴充方法用法取代為移除原始方法宣告的選項。

原因:此重構提供更清晰的語法。

操作方式

  1. 將插入號放在方法用法上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 從下列其中一個選項中選取

選取 [內嵌 <完整方法名稱>] 以移除內嵌方法宣告

Inline method example

選取 [內嵌並保留 <完整方法名稱>] 以保留原始方法宣告

Inline and keep method example

內嵌暫時變數

用途:可讓您移除暫時變數,並改用其值取代它。

時機:暫時變數的使用會使程式碼更難以理解。

原因:移除暫時變數可能會使程式碼更容易閱讀。

操作方式

  1. 將游標放在要內嵌的暫時變數內。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [內嵌暫時變數]。

Inline temporary variable example

為運算式引入區域變數

用途:可讓您立即產生區域變數以取代現有的運算式。

時機:您的程式碼如果放在區域變數中,稍後可以輕鬆重複使用。

原因:您可以多次複製並貼上程式碼以在各種位置使用它,但最好執行一次作業、將結果儲存在區域變數中,並在整個過程中使用區域變數。

操作方式

  1. 將插入號放在您想要指派給新區域變數的運算式上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 從下列選項中選取

選取 [引入區域變數 -> 為 <運算式> 引入區域變數]

Introduce local for expression example

選取 [引入區域變數 -> 為 <運算式> 的所有執行個體引入區域變數]

引入參數

用途:可讓您立即產生新參數以取代現有的運算式。

時機:您的程式碼如果放在參數中,稍後可以輕鬆重複使用。

原因:您可以多次複製並貼上程式碼以在各種位置使用它,但最好執行一次作業、將結果儲存在參數中,並在整個過程中使用參數。

操作方式

  1. 將插入號放在您想要指派給新參數的運算式上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 從下列選項中選取

選取 [為 <運算式> 引入參數 -> 並直接更新呼叫位置]

Update call sites directly example

選取 [為 <運算式> 引入參數 -> 進入已擷取的方法]

Introduce parameter into extracted method example

選取 [為 <運算式> 引入參數 -> 進入新的多載]

Introduce parameter into new overload example

引入 using 陳述式

用途:將 using 陳述式/程式碼區塊新增至您的 IDisposable 執行個體。

時機:您有一個 IDisposable 執行個體,您想要確保已正確取得、使用和處置它。

操作方式

  1. 將插入號放在您想要指派給新參數的運算式上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [引入 using 陳述式]。

Introduce  statement example

反轉條件運算式與邏輯運算

用途:可讓您反轉條件運算式或條件 and \ or 運算子。

時機:您有一個條件運算式或條件 and \ or 運算子,如果反轉,會更容易理解。

原因:手動反轉運算式或條件 and \ or 運算子可能需要更長的時間,而且可能會引入錯誤。此程式碼修正可協助您自動執行此重構。

操作方式

  1. 將游標放在條件運算式或條件 and \ or 運算子中。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [反轉條件] 或 [以 || 取代 &&]

Invert conditional example

Replace  with  example

反轉 if

用途:可讓您反轉 ifif else 陳述式,而不會變更程式碼的意義。

時機:當您有一個 ifif else 陳述式,如果反轉,會更容易理解。

原因:手動反轉 ifif else 陳述式可能需要更長的時間,而且可能會引入錯誤。此程式碼修正可協助您自動執行此重構。

操作方式

  1. 將游標放在 ifif else 陳述式中。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [反轉 if]。

Invert  example

將成員設為靜態

用途:將成員設為靜態。

時機:您想要將非靜態成員設為靜態。

原因:靜態成員可提高可讀性:知道特定程式碼已隔離,使其更容易理解、重新閱讀和重複使用。

操作方式

  1. 將插入號放在成員名稱上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [設為靜態]。

Make member static example

將宣告移至參考附近

用途:可讓您將變數宣告移至更接近其用法的位置。

時機:您的變數宣告可以放在更窄的範圍中。

原因:您可以保持原樣,但這可能會導致可讀性問題或資訊隱藏。這是一個重構以提高可讀性的機會。

操作方式

  1. 將游標放在變數宣告中。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [將宣告移至參考附近]。

Move declaration near reference example

將型別移至相符的檔案

用途:可讓您將選取的型別移至具有相同名稱的個別檔案。

時機:您在同一個檔案中有多個類別、struct、介面等等,您想要分隔它們。

原因:將多個型別放在同一個檔案中可能會使尋找這些型別變得困難。藉由將型別移至具有相同名稱的檔案,程式碼會變得更具可讀性且更易於導覽。

操作方式

  1. 將游標放在定義型別的名稱內。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [將型別移至 <型別名稱>.cs]。

Move type to matching file example

反轉 for 陳述式

用途:可讓您反轉 for 陳述式。

時機:當您想要反轉 for 陳述式的意義及其迭代方式時使用。

原因:手動反轉 for 陳述式可能需要更長的時間,而且可能會引入錯誤。此程式碼修正可協助您自動執行此重構。

操作方式

  1. 將游標放在 for 陳述式中。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [反轉 for 陳述式]。

Reverse  statements example

分割或合併 if 陳述式

用途:分割或合併 if 陳述式。

時機:您想要將使用 &&|| 運算子的 if 陳述式分割成巢狀 if 陳述式,或將 if 陳述式與外部 if 陳述式合併。

原因:這是一個樣式偏好的問題。

操作方式

如果您想要分割 if 陳述式

  1. 將游標放在 &&|| 運算子旁的 if 陳述式中。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [分割成巢狀 if 陳述式]。

Split into nested  statements example

如果您想要將內部 if 陳述式與外部 if 陳述式合併

  1. 將游標放在內部 if 關鍵字中。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [與巢狀 if 陳述式合併]。

Merge with nested  statements example

使用明確型別

用途:使用此重構將區域變數宣告中的 var 取代為明確型別。

Why: 為了提升程式碼的可讀性,或當您不想在宣告中初始化變數時。

然而,當變數使用匿名型別初始化,且稍後會存取物件的屬性時,必須使用 var。如需詳細資訊,請參閱隱含型別區域變數 (C#)

操作方式

  1. 將游標放在 var 關鍵字上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [使用明確型別取代 var]。

Use explicit type instead of  example

使用隱含型別

What: 使用此重構功能,將區域變數宣告中的明確型別取代為 var

Why: 為了符合您的個人程式碼撰寫慣例,並減少顯示的程式碼。當變數使用匿名型別初始化,且稍後會存取物件的屬性時,必須使用 Var。如需詳細資訊,請參閱隱含型別區域變數 (C#)

操作方式

  1. 將游標放在明確型別關鍵字上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [使用隱含型別]。

Use implicit type example

使用 Lambda 運算式或區塊主體

What: 讓您重構 Lambda 運算式,以使用運算式主體或區塊主體。

When: 您偏好 Lambda 運算式使用運算式主體或區塊主體。

Why: 可以重構 Lambda 運算式,以根據您的使用者偏好提升可讀性。

操作方式

  1. 將游標放在 Lambda 運算子的右側。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取下列其中一個

選取 [針對 Lambda 運算式使用區塊主體]。

Use block body for lambda expressions example

選取 [針對 Lambda 運算式使用運算式主體]。

Use expression body for lambda expressions

使用遞迴模式

What: 將程式碼區塊轉換為使用遞迴模式。此重構功能適用於 switch 陳述式、屬性模式比對、元組模式比對和位置模式比對。

When: 使用遞迴模式可以讓您的程式碼更具可讀性/更簡潔。

操作方式

  1. 將游標放在您想要轉換為遞迴模式的運算式上。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取下列其中一個

選取 [switch 陳述式轉換為運算式]。

Convert  statement to expression example

選取 [使用遞迴模式]。

Use recursive patterns before example

Use recursive patterns after example

包裝、縮排與對齊重構

包裝與對齊呼叫鏈

What: 讓您包裝和對齊方法呼叫鏈。

When: 您有一個陳述式中包含數個方法呼叫的長鏈。

Why: 當長清單根據使用者偏好進行包裝或縮排時,會更容易閱讀。

操作方式

  1. 將游標放在任何呼叫鏈中。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [包裝呼叫鏈] 或 [包裝並對齊呼叫鏈] 以接受重構。

Wrap and align call chain example

包裝、縮排與對齊參數或引數

What: 讓您包裝、縮排和對齊參數或引數。

When: 您有一個具有多個參數或引數的方法宣告或呼叫。

Why: 當一長串參數或引數根據使用者偏好進行包裝或縮排時,會更容易閱讀。

操作方式

  1. 將游標放在參數清單中。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 從下列選項中選取

選取 [包裝每個參數 -> 對齊包裝後的參數]

Align wrapped parameters example

選取 [包裝每個參數 -> 縮排所有參數]

Indent all parameters example

選取 [包裝每個參數 -> 縮排包裝後的參數]

Indent wrapped parameters example

包裝二元運算式

What: 讓您包裝二元運算式。

When: 您有一個二元運算式。

Why: 當二元運算式根據使用者偏好進行包裝時,會更容易閱讀。

操作方式

  1. 將游標放在二元運算式中。
  2. 按下 ⌘. (Windows、Linux Ctrl+.)以觸發 [快速動作與重構] 功能表。
  3. 選取 [包裝運算式] 以接受重構。

Wrap expression example