现已发布!阅读关于 12 月份的新功能和修复。

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 特性控制对象、属性或字段在调试器变量窗口中的显示方式。

适用场景:希望在代码中以编程方式固定(pin)调试器内的属性。

原因:固定属性允许您通过将该属性提升到调试器内对象属性列表的顶部来快速检查对象。

操作方法

  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 / 导入

内容:让您立即为复制粘贴的代码添加必要的导入或 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. 从以下选项中选择

选择 **转换为常规字符串**。

选择 **转换为逐字字符串**。

将类转换为 record

内容:将您的类转换为 C# record。

适用场景:当您想快速将类更改为 record 时,record 专用于存储数据和不变性。

操作方法

  1. 将光标放在类名称上。
  2. ⌘. (Windows, Linux Ctrl+.) 触发 **快速操作和重构** 菜单。
  3. 选择 **转换为位置 record**。

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 方法,以获得比 ValueType 上的 Equals 方法默认实现更高的性能。

操作方法

  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

内容:允许您反转 `if` 或 `if else` 语句,而不改变代码的含义。

适用场景:当您有一个 `if` 或 `if else` 语句,当反转它们时会更容易理解。

原因:手动反转 `if` 或 `if else` 语句可能需要更长的时间,并可能引入错误。此代码修复可帮助您自动完成此重构。

操作方法

  1. 将光标放在 `if` 或 `if 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. 选择 **将类型移至 <typename>.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

© . This site is unofficial and not affiliated with Microsoft.