现已推出!阅读 10 月份的新功能和修复。

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. 选择 生成构造函数 <classname>(<membertype>, <membertype>, <etc.>)

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

作用:让您可以立即添加复制粘贴代码所需的导入或 using 指令。

时机:复制项目中不同位置或其他来源中的代码并将其粘贴到新代码中是一种常见做法。此快速操作会查找复制粘贴代码中缺少的导入指令,然后提示您添加它们。此代码修复还可以添加项目到项目的引用。

原因:因为快速操作会自动添加必要的导入,所以您无需手动复制代码所需的 using 指令。

操作方法

  1. 从一个文件复制代码并将其粘贴到另一个文件,但不包括必要的 using 指令。由此产生的错误附带一个代码修复,该修复会添加缺少的 using 指令。
  2. 选择 ⌘. (Windows、Linux Ctrl+.) 打开 快速操作和重构 菜单。
  3. 选择 使用 <您的引用> 添加缺少的引用。

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 关键字的尝试转换之间转换变量。

时间: 当您希望在某些情况下转换失败 (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

将元组转换为结构体

内容: 将您的元组转换为 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 语句

什么: 为您的 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. 选择 将类型移动到 <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