參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

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. 選擇 **新增檔案頭**。

新增缺失的 usings / 匯入

功能:讓你能立即為複製貼上的程式碼新增必要的匯入或 using 指令。

時機:從專案中的不同位置或其他來源複製程式碼並貼上到新程式碼中是很常見的做法。此快速操作會查詢複製貼上程式碼中缺失的匯入指令,然後提示你新增它們。此程式碼修復功能還可以新增專案間的引用。

原因:由於快速操作會自動新增必要的匯入,你無需手動複製程式碼所需的 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# 記錄 (record)。

時機:當你想快速將類更改為記錄時,記錄型別專為儲存資料和不可變性而設計。

操作方法

  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

將元組轉換為結構

功能:將你的元組轉換為 struct

時機:當你想快速將元組更改為 struct,並且希望有需要多次訪問的固定資料時使用。

操作方法

  1. 將游標放在元組上。

  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 語句

功能:為你的 IDisposable 例項新增 using 語句/程式碼塊。

時機:當你有一個 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

將型別移動到匹配的檔案

功能:讓你能將所選型別移動到同名的單獨檔案中。

時機:當你在同一個檔案中有多個類、結構體、介面等,並希望將它們分開時。

原因:將多個型別放在同一個檔案中會使查詢這些型別變得困難。透過將型別移動到同名的檔案中,程式碼會變得更具可讀性,也更容易導航。

操作方法

  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 替換為顯式型別。

原因:為了提高程式碼的可讀性,或者當你不希望在宣告中初始化變數時。

然而,當變數用匿名型別初始化並且稍後需要訪問該物件的屬性時,必須使用 var。有關更多資訊,請參閱隱式型別區域性變數 (C#)

操作方法

  1. 將游標放在 var 關鍵字上。
  2. ⌘. (Windows, Linux Ctrl+.) 觸發 **快速操作和重構** 選單。
  3. 選擇 **使用顯式型別而非 var**。

Use explicit type instead of  example

使用隱式型別

功能:使用此重構將區域性變數宣告中的顯式型別替換為 var

原因:為了符合個人編碼約定並減少顯示的程式碼量。當變數用匿名型別初始化並且稍後需要訪問該物件的屬性時,必須使用 Var。有關更多資訊,請參閱隱式型別區域性變數 (C#)

操作方法

  1. 將游標放在顯式型別關鍵字上。
  2. ⌘. (Windows, Linux Ctrl+.) 觸發 **快速操作和重構** 選單。
  3. 選擇 **使用隱式型別**。

Use implicit type example

使用 Lambda 表示式或塊主體

功能:讓你能重構 lambda 表示式以使用表示式主體或塊主體。

時機:當你更喜歡 lambda 表示式使用表示式主體或塊主體時。

原因:可以根據使用者偏好重構 lambda 表示式以提高可讀性。

操作方法

  1. 將游標放在 lambda 運算子的右側。
  2. ⌘. (Windows, Linux Ctrl+.) 觸發 **快速操作和重構** 選單。
  3. 選擇以下之一

選擇 **為 lambda 表示式使用塊主體**。

Use block body for lambda expressions example

選擇 **為 lambda 表示式使用表示式主體**。

Use expression body for lambda expressions

使用遞迴模式

功能:將程式碼塊轉換為使用遞迴模式。此重構適用於 switch 語句、屬性模式匹配、元組模式匹配和位置模式匹配。

時機:使用遞迴模式可以使你的程式碼更具可讀性/更簡潔。

操作方法

  1. 將游標放在你想要轉換為遞迴模式的表示式上。
  2. ⌘. (Windows, Linux Ctrl+.) 觸發 **快速操作和重構** 選單。
  3. 選擇以下之一

選擇 **將 switch 語句轉換為表示式**。

Convert  statement to expression example

選擇 **使用遞迴模式**。

Use recursive patterns before example

Use recursive patterns after example

換行、縮排和對齊重構

換行和對齊呼叫鏈

功能:讓你能換行和對齊方法呼叫鏈。

時機:當你在一個語句中有由多個方法呼叫組成的很長的呼叫鏈時。

原因:根據使用者偏好將長列表換行或縮排後,閱讀起來會更容易。

操作方法

  1. 將游標放在任何一個呼叫鏈中。
  2. ⌘. (Windows, Linux Ctrl+.) 觸發 **快速操作和重構** 選單。
  3. 選擇 **換行呼叫鏈** 或 **換行並對齊呼叫鏈** 以接受重構。

Wrap and align call chain example

換行、縮排和對齊引數或實參

功能:讓你能換行、縮排和對齊引數或實參。

時機:當你的方法宣告或呼叫有多個引數或實參時。

原因:根據使用者偏好將長引數或實參列表換行或縮排後,閱讀起來會更容易。

操作方法

  1. 將游標放在引數列表中。
  2. ⌘. (Windows, Linux Ctrl+.) 觸發 **快速操作和重構** 選單。
  3. 從以下選項中選擇

選擇 **換行每個引數 -> 對齊換行的引數**

Align wrapped parameters example

選擇 **換行每個引數 -> 縮排所有引數**

Indent all parameters example

選擇 **換行每個引數 -> 縮排換行的引數**

Indent wrapped parameters example

換行二進位制表示式

功能:讓你能換行二進位制表示式。

時機:當你有一個二進位制表示式時。

原因:根據使用者偏好將二進位制表示式換行後,閱讀起來會更容易。

操作方法

  1. 將游標放在二進位制表示式中。
  2. ⌘. (Windows, Linux Ctrl+.) 觸發 **快速操作和重構** 選單。
  3. 選擇 **換行表示式** 以接受重構。

Wrap expression example