C# 快速操作和重构

Visual Studio Code 为您提供了多种重构源代码的方式,以及在编码时生成代码和修复问题的快速修复功能。要访问这些功能,请点击出现的“灯泡”图标或使用 Quick Fix 命令 ⌘. (Windows, Linux Ctrl+.) 来显示快速修复和重构选项的列表。您还可以右键点击编辑器并选择 Refactor ⌃⇧R (Windows, Linux Ctrl+Shift+R) 以仅显示重构选项。

支持的代码重构和快速修复

添加等待

什么: 向函数调用添加 await 关键字。

当: 当你在一个异步方法中调用一个函数时。

操作指南:

  1. 将光标放在函数调用旁边(很可能会用红色下划线标出)。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择添加await

添加await示例

从成员添加构造函数参数

什么: 根据选定的类成员生成一个带有参数的新构造函数。

何时使用: 当你引入一个新的构造函数并希望自动正确地声明所有正确的参数时。

原因: 您可以在使用构造函数之前声明它,但此功能会自动生成它。

操作指南:

  1. 高亮显示您想要作为构造函数参数添加的类成员。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择生成构造函数 (, , )

从成员添加构造函数参数示例

添加 DebuggerDisplay 属性

内容: DebuggerDisplay 属性 控制对象、属性或字段在调试器变量窗口中的显示方式。

何时使用: 当你想在代码中以编程方式在调试器中固定属性时。

原因:固定属性允许您通过将属性冒泡到调试器中对象属性列表的顶部,快速检查对象的属性。

操作指南:

  1. 将光标放在类型、委托、属性或字段上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单并选择 添加 DebuggerDisplay 属性
  3. 添加了DebuggerDisplay属性以及一个自动方法,该方法返回默认的ToString()

添加DebuggerDisplay属性示例

添加显式类型转换

功能: 允许您根据使用情况自动向表达式添加显式类型转换。

何时使用: 当你需要为表达式添加显式类型转换并希望自动正确分配时。

原因: 您可以手动为表达式添加显式类型转换,但此功能会根据代码上下文自动添加。

操作指南:

  1. 将光标放在错误上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择添加显式类型转换

添加文件头

内容: 使用 EditorConfig 向现有文件、项目和解决方案添加文件头。

何时使用: 当您想要轻松地为文件、项目和解决方案添加文件头时。

原因: 您的团队要求您出于版权目的包含文件头。

操作指南:

  1. 如果项目或解决方案中还没有EditorConfig,请添加一个。
  2. 将以下规则添加到您的EditorConfig文件中:file_header_template
  3. 将规则的值设置为您想要应用的标题文本。您可以使用{fileName}作为文件名的占位符。
  4. 将光标放在任何C#文件的第一行。
  5. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  6. 选择添加文件头

添加缺失的 usings / imports

功能: 允许您立即为复制粘贴的代码添加必要的导入或使用指令。

何时使用: 通常的做法是从项目的不同地方或其他来源复制代码并粘贴到新代码中。此快速操作会为复制粘贴的代码找到缺失的导入指令,然后提示您添加它们。此代码修复还可以添加项目之间的引用。

为什么: 因为快速操作会自动添加必要的导入,你不需要手动复制代码所需的using指令。

操作指南:

  1. 从文件中复制代码并粘贴到新文件中,但不包括必要的using指令。由此产生的错误伴随着一个代码修复,该修复添加了缺失的using指令。
  2. 选择 ⌘. (Windows, Linux Ctrl+.) 打开 快速操作和重构 菜单。
  3. 选择使用 来添加缺失的引用。

添加缺失的 / 导入示例

添加命名参数

什么: 在函数调用中向指定的参数值附加一个命名参数。

何时使用: 如果你有一个包含很多参数的方法,你可以添加命名参数以使你的代码更易读。

操作指南:

  1. 将光标放在函数调用中的参数内。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择添加参数名称 <参数名称>

添加命名参数示例

将匿名类型转换为类

什么: 将匿名类型转换为类。

何时使用: 当你有一个匿名类型,并且你想在一个类中继续构建它时。

为什么: 匿名类型在仅本地使用时非常有用。随着代码的增长,有一个简单的方法将它们提升为类是很方便的。

操作指南:

  1. 将光标放在匿名(var)类型中。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择转换为类

将匿名类型转换为类的示例

在自动属性和完整属性之间转换

什么: 在自动实现的属性和完整属性之间进行转换。

何时: 属性的逻辑已更改。

原因: 您可以手动在自动实现的属性和完整属性之间进行转换,但是此功能将自动为您完成这项工作。

操作指南:

  1. 将光标放在属性名称上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 从以下两个选项中选择:

选择转换为完整属性。

转换为完整属性示例

选择使用自动属性。

使用自动属性示例

在直接转换和'as'表达式之间转换

什么: 使用 as 关键字在常规转换和尝试转换之间转换变量。

何时使用: 当您预期在某些情况下类型转换会失败时(使用as),或者如果您从不预期类型转换会失败时(直接转换)。

操作指南:

  1. 将光标放在变量上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 从以下两个选项中选择:

选择更改为投射

更改为强制转换示例

选择 更改为 as 表达式。

更改为表达式示例

在for循环和foreach语句之间转换

什么: 如果你的代码中有一个for循环,你可以使用这个重构来将其转换为一个foreach语句。

为什么:你可能想要将for循环转换为foreach语句的原因包括:

  • 在循环内部,除了作为访问项目的索引外,您不使用本地循环变量。
  • 您希望简化代码并减少初始化器、条件和迭代器部分中逻辑错误的可能性。

你可能想要将foreach语句转换为for循环的原因包括:

  • 您希望在循环内部使用局部循环变量,而不仅仅是访问项目。
  • 您正在遍历一个多维数组,并且希望对数组元素有更多的控制。

操作指南:

  1. 将光标放在foreachfor关键字中。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 从以下两个选项中选择:

选择转换为for

转换为示例

选择转换为foreach

转换为

在Get方法和属性之间转换

将Get方法转换为属性

功能: 允许您将Get方法转换为属性(并可选地转换Set方法)。

何时使用: 当你有一个不包含任何逻辑的Get方法时。

操作指南:

  1. 将光标放在您的Get方法名称中。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. (可选)如果您有一个Set方法,您也可以在此刻转换您的Set方法。选择用属性替换

用属性替换Get方法示例

将属性转换为Get方法

什么: 允许您将属性转换为Get方法

何时使用: 当你有一个属性涉及不仅仅是立即设置和获取值时

操作指南:

  1. 将光标放在您的Get方法名称中。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择用方法替换<属性名称>

用方法替换属性名称示例

在if和switch语句之间转换

什么:if语句转换为switch语句或C# 8.0的switch表达式

何时使用: 当你想将一个if语句转换为switch语句或switch表达式,反之亦然。

原因: 如果你正在使用 if 语句,这种重构可以轻松过渡到 switch 语句或 switch 表达式。

操作指南:

  1. 将光标放在if关键字中。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 从以下选项中选择:

选择转换为switch语句

转换为语句示例

选择转换为switch表达式

转换为表达式示例

选择转换为if语句

转换为语句示例

在常规字符串和逐字字符串之间转换

功能: 允许您在常规字符串和逐字字符串字面量之间进行转换。

何时使用: 当您想要节省空间或在代码中提供更清晰的表达时。

原因: 将逐字字符串字面量转换为常规字符串字面量可以帮助节省空间。将常规字符串字面量转换为逐字字符串字面量可以提供更清晰的表达。

操作指南:

  1. 将光标放在常规字符串或逐字字符串字面量上:
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 从以下选项中选择一个:

选择转换为常规字符串

选择转换为逐字字符串

将类转换为记录

什么: 将您的类转换为C#记录。

何时使用: 当您希望快速将类更改为记录时,记录是为存储数据和不可变性而量身定制的。

操作指南:

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

在示例之前将类转换为记录

示例后将类转换为记录

将局部函数转换为方法

什么: 将本地函数转换为方法。

何时使用: 当你有一个本地函数,想要在当前本地上下文之外定义时。

原因: 您希望将本地函数转换为方法,以便可以在本地上下文之外调用它。当您的本地函数变得太长时,您可能希望将其转换为方法。当您在单独的方法中定义函数时,您的代码更易于阅读。

操作指南:

  1. 将光标放在本地函数中。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择转换为方法

将本地函数转换为方法示例

将数字字面量转换为十六进制、十进制或二进制数

什么: 在十六进制、二进制或十进制数之间转换一个数字。

何时使用: 当您希望自动将数字转换为所需的基数而不必手动计算转换时使用。

操作指南:

  1. 将光标放在数字字面量上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择以下选项之一:

选择转换为十进制

转换为十进制示例

选择转换为十六进制

转换为十六进制示例

选择转换为二进制

转换为二进制示例

将占位符转换为插值字符串

什么:String.Format 格式化的结果字符串(或占位符)转换为插值字符串。

何时使用: 当您想要快速生成一个插值字符串时使用。

为什么: 插值字符串可以为您提供更易读的String.Format版本,并允许您直接访问变量名。

操作指南:

  1. 将光标放在String.Format占位符上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择转换为插值字符串

将占位符转换为插值字符串示例

将常规字符串转换为插值字符串

什么: 将常规字符串更改为插值字符串。

何时使用: 当你想清理代码并使其更具可读性时使用。

操作指南:

  1. 将光标放在您想要转换的字符串上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择转换为插值字符串

在示例之前转换为插值字符串

示例后转换为插值字符串

将元组转换为结构体

什么: 将你的元组转换为struct

何时使用: 当你想要快速将元组转换为struct并且想要多次访问固定数据时使用。

操作指南:

  1. 将光标放在元组上。

  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。

  3. 请选择以下选项之一:

    • Select Convert to struct -> updating usages in containing member
    • Select Convert to struct -> updating usages in containing type
    • Select Convert to struct -> updating usages in containing project
    • Select Convert to struct -> updating usages in in dependent projects

将元组转换为选项

将元组转换为示例

封装字段

功能: 允许您将字段转换为属性,并更新所有使用该字段的地方以使用新创建的属性。

何时使用: 当你想将一个字段移动到一个属性中,并更新所有对该字段的引用时。

原因: 您希望其他类能够访问某个字段,但不希望这些类直接访问。通过将字段封装在属性中,您可以编写代码来验证所赋的值,例如。

操作指南:

  1. 将光标放在要封装的字段名称内。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择以下之一:

选择封装字段:(并使用属性)

封装字段并使用属性示例

选择封装字段:(但仍使用字段)

封装字段但仍使用字段示例

生成比较运算符

什么: 允许您为实现了 IComparable 的类型生成比较运算符。

何时: 当您有一个实现了 IComparable 的类型时,我们将自动添加比较运算符。

原因: 如果你正在实现一个值类型,你应该考虑重写 Equals 方法,以获得比 ValueType 上默认实现的 Equals 方法更高的性能。

操作指南:

  1. 将光标放在类内部或IComparable关键字上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 从下拉菜单中选择生成比较运算符

生成默认构造函数

功能: 允许您立即为类生成一个新的默认构造函数的代码。

何时使用: 当你引入一个新的默认构造函数并希望自动正确地声明它时。

原因: 您可以在使用构造函数之前声明它,但此功能会自动生成它。

操作指南:

  1. 将光标放在类名上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择生成构造函数 ()

生成默认构造函数示例

生成参数

什么: 自动生成一个方法参数。

何时: 当你在方法中引用了一个在当前上下文中不存在的变量并收到错误时;你可以生成一个参数作为代码修复。

为什么: 你可以快速修改方法签名而不丢失上下文。

操作指南:

  1. 将光标放在变量名称上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择生成参数

生成参数示例

显式实现所有成员

什么: 在类中明确地定义你的接口方法。显式接口实现是一个类成员,只能通过指定的接口调用。

何时使用: 在以下情况下使用:

  • 你不希望为多个接口调用相同的实现。
  • 您希望解决两个接口各自声明相同名称的不同成员(如属性和方法)的情况。

操作指南:

  1. 将光标放在类中正在实现的接口上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择显式实现所有成员

显式实现所有成员的示例

隐式实现所有成员

什么: 在类中隐式定义接口的方法。隐式接口实现是指将接口的方法和属性直接作为公共方法添加到类中。

操作指南:

  1. 将光标放在类中正在实现的接口上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择实现接口

隐式实现所有成员

内联方法

内容: 内联方法重构。

何时使用: 当你想在单个语句体中替换静态方法、实例方法和扩展方法的使用,并且可以选择移除原始方法声明时。

原因: 这种重构提供了更清晰的语法。

操作指南:

  1. 将光标放在方法的使用位置。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 从以下选项中选择一个:

选择内联 以移除内联方法声明:

内联方法示例

选择内联并保留以保留原始方法声明:

内联并保留方法示例

内联临时变量

作用: 允许您删除临时变量并用其值替换。

何时: 使用临时变量会使代码更难理解。

原因: 移除临时变量可以使代码更易于阅读。

操作指南:

  1. 将光标放置在要内联的临时变量内。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择内联临时变量

内联临时变量示例

为表达式引入局部变量

作用: 允许您立即生成一个局部变量来替换现有的表达式。

何时使用: 当你有代码如果放在局部变量中以后可以很容易地重用时。

为什么: 你可以多次复制和粘贴代码以在不同的位置使用它,但是更好的做法是执行一次操作,将结果存储在局部变量中,并在整个过程中使用该局部变量。

操作指南:

  1. 将光标放在您想要分配给新局部变量的表达式上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 从以下选项中选择:

选择 引入局部变量 -> 为 <表达式> 引入局部变量

引入局部表达式示例

选择引入本地 -> 为所有出现的引入本地

引入参数

功能: 允许您立即生成一个新参数以替换现有表达式。

何时: 当你有代码如果放在参数中以后可以很容易地重用时。

原因: 你可以多次复制和粘贴代码以在不同的位置使用它,但更好的做法是执行一次操作,将结果存储在参数中,并在整个过程中使用该参数。

操作指南:

  1. 将光标放在您想要分配给新参数的表达式上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 从以下选项中选择:

选择 引入参数 -> 并直接更新调用点

直接更新调用站点示例

选择 引入参数 -> 提取到方法中

将参数引入提取方法示例

选择 引入参数 -> 到新重载

将参数引入新重载示例

介绍 using 语句

内容: 向你的 IDisposable 实例添加一个 using 语句 / 代码块。

何时使用: 当你有一个IDisposable实例,并希望确保它被正确获取、使用和释放时。

操作指南:

  1. 将光标放在您想要分配给新参数的表达式上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择引入using语句

介绍语句示例

反转条件表达式和逻辑操作

功能: 允许你反转条件表达式或条件and \ or运算符。

何时使用: 当你有一个条件表达式或条件and \ or运算符,如果反转会更容易理解时。

原因:手动反转表达式或条件 and \ or 操作符可能需要更长时间,并可能引入错误。此代码修复帮助您自动完成此重构。

操作指南:

  1. 将光标放在条件表达式或条件and \ or运算符中。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择反转条件&&替换为||

反转条件示例

替换为示例

反转 if

功能: 允许你反转一个 ifif else 语句,而不改变代码的含义。

何时使用: 当你有一个ifif else语句,反转后更容易理解时。

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

操作指南:

  1. 将光标放置在ifif else语句中。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择反转if

反转示例

使成员静态

什么: 使成员变为静态。

何时使用: 当你希望一个非静态成员变为静态时。

原因: 静态成员提高了可读性:知道特定代码是隔离的,使得理解、重读和重用变得更加容易。

操作指南:

  1. 将光标放在成员名称上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择设为静态

使成员静态示例

将声明移至引用附近

作用: 允许你将变量声明更靠近它们的使用位置。

何时: 当你有可以在更窄范围内声明的变量时。

原因: 你可以保持原样,但这可能会导致可读性问题或信息隐藏。这是一个重构以提高可读性的机会。

操作指南:

  1. 将光标放在变量声明处。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择将声明移至引用附近

将声明移至引用附近的示例

将类型移动到匹配的文件

功能: 允许您将选定的类型移动到具有相同名称的单独文件中。

何时使用: 当你在同一个文件中有多个类、结构体、接口等,并且想要将它们分开时。

原因: 将多种类型放在同一个文件中可能会使查找这些类型变得困难。通过将类型移动到具有相同名称的文件中,代码变得更加可读且更易于导航。

操作指南:

  1. 将光标放置在定义类型的名称内部。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择将类型移动到 .cs

将类型移动到匹配文件示例

反向for语句

什么: 允许你反转一个for语句。

何时使用: 当你想反转for语句的含义及其迭代方式时使用。

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

操作指南:

  1. 将光标放在for语句中。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择反转for语句

Reverse 语句示例

拆分或合并if语句

什么: 拆分或合并 if 语句。

何时使用: 当你想将一个使用 &&|| 运算符的 if 语句拆分为嵌套的 if 语句,或者将一个 if 语句与外部的 if 语句合并时。

原因: 这是一个风格偏好的问题。

操作指南:

如果你想拆分if语句:

  1. 将光标放置在if语句中的&&||运算符旁边。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择拆分为嵌套的if语句

拆分为嵌套语句示例

如果你想将内部的if语句与外部的if语句合并:

  1. 将光标放在内部的 if 关键字处。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择合并嵌套的if语句

合并嵌套语句示例

使用显式类型

什么: 使用此重构将局部变量声明中的 var 替换为显式类型。

原因: 为了提高代码的可读性,或者当您不想在声明时初始化变量时。

然而,当使用匿名类型初始化变量并在稍后访问对象的属性时,必须使用var。有关更多信息,请参阅隐式类型局部变量 (C#)

操作指南:

  1. 将光标放在var关键字上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择使用显式类型而不是var

使用显式类型而不是示例

使用隐式类型

什么: 使用此重构将局部变量声明中的显式类型替换为 var

原因: 为了适应您的个人编码习惯并减少显示的代码量。当使用匿名类型初始化变量并在稍后访问对象的属性时,必须使用Var。有关更多信息,请参阅隐式类型局部变量(C#)

操作指南:

  1. 将光标放在显式类型关键字上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择使用隐式类型

使用隐式类型示例

使用lambda表达式或块体

功能: 允许您重构lambda表达式以使用表达式体或块体。

何时使用: 当您更喜欢使用表达式体或块体的lambda表达式时。

原因: 可以根据用户的偏好重构Lambda表达式以提高可读性。

操作指南:

  1. 将光标放在lambda运算符的右侧。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择以下之一:

选择对lambda表达式使用块体

使用块体作为lambda表达式的示例

选择对lambda表达式使用表达式体

为lambda表达式使用表达式体

使用递归模式

作用: 将代码块转换为使用递归模式。此重构适用于switch语句、属性模式匹配、元组模式匹配和位置模式匹配。

何时使用: 使用递归模式可以使你的代码更易读/更简洁。

操作指南:

  1. 将光标放在您想要转换为递归模式的表达式上。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择以下之一:

选择switch语句转换为表达式

将语句转换为表达式的示例

选择使用递归模式

在示例之前使用递归模式

示例后使用递归模式

包装、缩进和对齐重构

包装和对齐调用链

什么: 允许您包装和对齐方法调用链。

何时使用: 当你在一个语句中有多个方法调用的长链时。

为什么: 当长列表根据用户偏好进行换行或缩进时,阅读起来会更容易。

操作指南:

  1. 将光标放在任何调用链中。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择Wrap call chainWrap and align call chain以接受重构。

包装和对齐调用链示例

包装、缩进和对齐参数或参数

功能: 允许您包装、缩进和对齐参数或参数。

何时使用: 当您有一个方法声明或调用具有多个参数或参数时。

原因: 当参数或参数列表根据用户偏好进行换行或缩进时,阅读起来会更容易。

操作指南:

  1. 将光标放在参数列表中。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 从以下选项中选择:

选择换行每个参数 -> 对齐换行后的参数

对齐换行参数示例

选择 换行每个参数 -> 缩进所有参数

缩进所有参数示例

选择换行每个参数 -> 缩进换行参数

缩进包裹参数示例

包装二进制表达式

什么: 允许你包装二进制表达式。

当: 你有一个二元表达式。

原因:当二进制表达式按照用户偏好进行换行时,阅读起来会更容易。

操作指南:

  1. 将光标放在二进制表达式中。
  2. 按下 ⌘. (Windows, Linux Ctrl+.) 来触发 快速操作和重构 菜单。
  3. 选择Wrap expression以接受重构。

包装表达式示例