C# 快速操作和重构
Visual Studio Code 为你提供了多种重构源代码的方法,以及在编码时生成代码和修复问题的“快速修复”。要访问它们,请点击出现的“灯泡”图标,或使用 快速修复 命令 ⌘. (Windows, Linux Ctrl+.) 来显示快速修复和重构选项列表。你也可以右键点击编辑器并选择 重构 ⌃⇧R (Windows, Linux Ctrl+Shift+R) 来仅显示重构选项。
支持的重构和快速修复
- 添加
await - 从成员添加构造函数参数
- 添加
DebuggerDisplay特性 - 添加显式强制转换
- 添加文件头
- 添加缺少的
usings/ 导入 - 添加命名参数
- 将匿名类型转换为类
- 在自动属性和完整属性之间转换
- 在直接转换和
as表达式之间转换 - 在
for循环和foreach语句之间转换 - 在 Get 方法和属性之间转换
- 在
if和switch语句之间转换 - 在常规字符串和逐字字符串之间转换
- 将类转换为记录 (record)
- 将局部函数转换为方法
- 将数字常量转换为十六进制、十进制或二进制数字
- 将占位符转换为内插字符串
- 将常规字符串转换为内插字符串
- 将元组转换为结构体 (struct)
- 封装字段
- 生成比较运算符
- 生成默认构造函数
- 生成参数
- 显式实现所有成员
- 隐式实现所有成员
- 内联方法
- 内联临时变量
- 为表达式引入局部变量
- 引入参数
- 引入
using语句 - 反转条件表达式和逻辑运算
- 反转
if - 使成员静态化
- 将声明移至引用附近
- 将类型移至匹配的文件中
- 反转
for语句 - 拆分或合并
if语句 - 使用显式类型
- 使用隐式类型
- 使用 lambda 表达式或块体
- 使用递归模式
- 包装、缩进和对齐重构
添加 await
操作: 为函数调用添加 await 关键字。
时机: 当你在异步方法中调用函数时。
操作方法
- 将光标置于函数调用旁(通常会有红色下划线)。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 添加
await。

从成员添加构造函数参数
操作: 根据选定的类成员生成带有参数的新构造函数。
时机: 当你引入新构造函数并希望自动正确声明所有参数时。
理由: 你可以在使用前声明构造函数,但此功能可自动生成它。
操作方法
- 高亮显示你想要作为构造函数参数添加的类成员。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 生成构造函数 <类名>(<成员类型>, <成员类型>, <等等>)。

添加 DebuggerDisplay 特性
操作: DebuggerDisplay 特性 控制对象、属性或字段在调试器变量窗口中的显示方式。
时机: 你希望在代码中以编程方式固定属性。
理由: 固定属性允许你通过将属性冒泡到调试器内对象属性列表的顶部,从而快速检查对象。
操作方法
- 将光标置于类型、委托、属性或字段上。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单,并选择 添加
DebuggerDisplay特性。 DebuggerDisplay特性会被添加,同时还有一个返回默认ToString()的自动方法。

添加显式强制转换
操作: 根据使用情况自动为表达式添加显式转换。
时机: 当你需要为表达式添加显式转换并希望自动正确分配它时。
理由: 你可以手动为表达式添加显式转换,但此功能会根据代码上下文自动添加。
操作方法
- 将光标置于错误处。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 添加显式强制转换。
添加文件头
操作: 使用 EditorConfig 为现有文件、项目和解决方案添加文件头。
时机: 当你想轻松为文件、项目和解决方案添加文件头时。
理由: 你的团队要求你出于版权目的包含文件头。
操作方法
- 如果还没有 EditorConfig,请为项目或解决方案添加一个 EditorConfig。
- 将以下规则添加到你的 EditorConfig 文件中:
file_header_template。 - 将该规则的值设置为你想要应用的标题文本。你可以使用
{fileName}作为文件名的占位符。 - 将光标置于任何 C# 文件的第一行。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 添加文件头。
添加缺少的 using / 导入
操作: 让你能够立即为复制粘贴的代码添加必要的导入或 using 指令。
时机: 从项目或其他来源的不同位置复制代码并粘贴到新代码中是一种常见做法。此快速操作会查找复制粘贴代码中缺少的导入指令,然后提示你添加它们。此代码修复还可以添加项目间的引用。
理由: 由于快速操作会自动添加必要的导入,因此你无需手动复制代码所需的 using 指令。
操作方法
- 从一个文件中复制并粘贴代码到新文件中,且不包含必要的 using 指令。产生的错误会附带一个代码修复,用于添加缺少的 using 指令。
- 选择 ⌘. (Windows, Linux Ctrl+.) 以打开 快速操作和重构 菜单。
- 选择 Using <你的引用> 以添加缺少的引用。

添加命名参数
操作: 在函数调用中为指定的参数值附加命名参数。
时机: 如果某个方法有很多参数,你可以添加命名参数以使代码更具可读性。
操作方法
- 将光标置于函数调用的参数内。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 添加参数名 <参数名>。

将匿名类型转换为类
操作: 将匿名类型转换为类。
时机: 你有一个匿名类型,并希望在类中继续构建它。
理由: 匿名类型仅在局部使用时很有用。随着代码的发展,拥有将其提升为类的简便方法会很好。
操作方法
- 将光标置于匿名 (
var) 类型中。 - 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 转换为类。

在自动属性和完整属性之间转换
操作: 在自动实现的属性和完整属性之间转换。
时机: 属性逻辑发生了变化。
理由: 你可以手动在自动实现的属性和完整属性之间转换,但此功能将自动为你完成工作。
操作方法
- 将光标置于属性名上。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 从以下两个选项中选择
选择 转换为完整属性。

选择 使用自动属性。

在直接转换和“as”表达式之间转换
操作: 使用 as 关键字在常规转换和尝试转换 (try cast) 之间转换变量。
时机: 当你预期在某些情况下转换会失败时 (as),或者如果你从不预期转换会失败(直接转换)。
操作方法
- 将光标置于变量上。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 从以下两个选项中选择
选择 更改为强制转换。

选择 更改为 as 表达式。

在 for 循环和 foreach 语句之间转换
操作: 如果你的代码中有 for 循环,可以使用此重构将其转换为 foreach 语句。
理由: 你可能想将 for 循环转换为 foreach 语句的原因包括
- 除了作为访问项的索引外,你在循环内不使用局部循环变量。
- 你想简化代码并减少初始化程序、条件和迭代器部分出现逻辑错误的可能性。
你可能想将 foreach 语句转换为 for 循环的原因包括
- 你想在循环内部使用局部循环变量,不仅仅是为了访问该项。
- 你正在迭代多维数组,并希望对数组元素有更多控制。
操作方法
- 将光标置于
foreach或for关键字中。 - 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 从以下两个选项中选择
选择 转换为 for。

选择 转换为 foreach。

在 Get 方法和属性之间转换
将 Get 方法转换为属性
操作: 让你能将 Get 方法转换为属性(可选包括 Set 方法)。
时机: 你有一个不包含任何逻辑的 Get 方法。
操作方法
- 将光标置于 Get 方法名称中。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- (可选)如果你有 Set 方法,也可以同时转换它。选择 用属性替换 <Get 方法或 Set 方法名>。

将属性转换为 Get 方法
操作: 让你能将属性转换为 Get 方法
时机: 你有一个涉及的内容不仅仅是立即设置和获取值的属性
操作方法
- 将光标置于 Get 方法名称中。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 用方法替换 <属性名>。

在 if 和 switch 语句之间转换
操作: 将 if 语句转换为 switch 语句 或 C# 8.0 switch 表达式。
时机: 你想将 if 语句转换为 switch 语句或 switch 表达式,反之亦然。
理由: 如果你正在使用 if 语句,此重构可实现向 switch 语句或 switch 表达式的平滑过渡。
操作方法
- 将光标置于
if关键字中。 - 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 从以下选项中选择
选择 转换为 switch 语句。

选择 转换为 switch 表达式。

选择 转换为 if 语句。

在常规字符串和逐字字符串之间转换
操作: 让你在常规字符串和逐字字符串文字之间进行转换。
时机: 你想要节省空间或在代码中提供更高的清晰度。
理由: 将逐字字符串文字转换为常规字符串文字有助于节省空间。将常规字符串文字转换为逐字字符串文字可以提供更高的清晰度。
操作方法
- 将光标置于常规字符串或逐字字符串文字上
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 从以下选项之一中选择
选择 转换为常规字符串。
选择 转换为逐字字符串。
将类转换为记录 (record)
操作: 将你的类转换为 C# 记录 (record)。
时机: 当你想快速将类更改为记录,该记录专门用于存储数据和不可变性时。
操作方法
- 将光标置于类名上。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 转换为位置记录。


将局部函数转换为方法
操作: 将局部函数转换为方法。
时机: 你有一个局部函数,并希望在当前局部上下文之外定义它。
理由: 你想将局部函数转换为方法,以便在局部上下文之外调用它。当局部函数变得太长时,你可能想将其转换为方法。在单独的方法中定义函数后,代码更易于阅读。
操作方法
- 将光标置于局部函数中。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 转换为方法。

将数字常量转换为十六进制、十进制或二进制数字
操作: 在十六进制、二进制或十进制数字之间转换数字。
时机: 当你想自动将数字转换为所需的基数而无需手动计算转换时使用。
操作方法
- 将光标置于数字常量上。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择以下选项之一
选择 转换为十进制。

选择 转换为十六进制。

选择 转换为二进制。

将占位符转换为内插字符串
操作: 将 String.Format 格式化的结果字符串(或占位符)转换为内插字符串。
时机: 当你想快速使用内插字符串时使用。
理由: 内插字符串可以提供比 String.Format 更易读的版本,并让你直接访问变量名。
操作方法
- 将光标置于
String.Format占位符上。 - 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 转换为内插字符串。

将常规字符串转换为内插字符串
操作: 将常规字符串更改为内插字符串。
时机: 当你想清理代码并使其更易读时使用。
操作方法
- 将光标置于要转换的字符串上。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 转换为内插字符串。


将元组转换为结构体 (struct)
操作: 将元组转换为 struct
时机: 当你想快速将元组更改为 struct 并希望拥有多次访问的固定数据时使用。
操作方法
-
将光标置于元组上。
-
按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
-
选择以下选项之一
- 选择 转换为
struct-> 更新包含成员中的用法 - 选择 转换为
struct-> 更新包含类型中的用法 - 选择 转换为
struct-> 更新包含项目中的用法 - 选择 转换为
struct-> 更新从属项目中的用法
- 选择 转换为


封装字段
操作: 让你能将字段转换为属性,并更新该字段的所有用法以使用新创建的属性。
时机: 你想将字段移动到属性中,并更新对该字段的所有引用。
理由: 你想给其他类访问字段的权限,但不希望这些类具有直接访问权限。通过将字段封装在属性中,你可以编写代码来验证所分配的值,例如。
操作方法
- 将光标置于要封装的字段名称中。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择以下选项之一
选择 封装字段:<字段名>(并使用属性)。

选择 封装字段:<字段名>(但仍使用字段)。

生成比较运算符
操作: 让你能为实现 IComparable 的类型生成比较运算符。
时机: 当你拥有一种实现 IComparable 的类型时,我们会自动添加比较运算符。
理由: 如果你正在实现值类型,你应该考虑重写 Equals 方法,以比 ValueType 上的 Equals 方法的默认实现获得更高的性能。
操作方法
- 将光标置于类内部或 IComparable 关键字上。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 从下拉菜单中选择 生成比较运算符。
生成默认构造函数
操作: 让你能立即为类生成新默认构造函数的代码。
时机: 当你引入新默认构造函数并希望自动正确声明它时。
理由: 你可以在使用前声明构造函数,但此功能可自动生成它。
操作方法
- 将光标置于类名上。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 生成构造函数 <类名>()。

生成参数
操作: 自动生成方法参数。
时机: 当你在方法中引用了当前上下文中不存在的变量并收到错误时;你可以生成一个参数作为代码修复。
理由: 你可以在不丢失上下文的情况下快速修改方法签名。
操作方法
- 将光标置于变量名中。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 生成参数。

显式实现所有成员
操作: 在类中显式定义接口的方法。显式接口实现是仅通过指定接口调用的类成员。
时机: 在以下情况使用
- 你不希望相同的实现被多个接口调用。
- 你想解决两个接口各自声明不同同名成员(如属性和方法)的情况。
操作方法
- 将光标置于类中正在实现的接口上。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 显式实现所有成员

隐式实现所有成员
操作: 在类中隐式定义接口的方法。隐式接口实现是指接口的方法和属性直接作为公共方法添加到类中。
操作方法
- 将光标置于类中正在实现的接口上。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 实现接口

内联方法
操作: 内联方法重构。
时机: 你想在单个语句体中替换静态、实例和扩展方法的用法,并可选择移除原始方法声明。
理由: 此重构提供了更清晰的语法。
操作方法
- 将光标置于方法的使用处。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 从以下选项之一中选择
选择 内联 <QualifiedMethodName> 以移除内联方法声明

选择 内联并保留 <QualifiedMethodName> 以保留原始方法声明

内联临时变量
操作: 让你能移除临时变量并用其值替换它。
时机: 临时变量的使用使代码更难理解。
理由: 移除临时变量可能会使代码更易于阅读。
操作方法
- 将光标置于要内联的临时变量中。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 内联临时变量。

为表达式引入局部变量
操作: 让你能立即生成局部变量以替换现有表达式。
时机: 你有一些代码,如果放在局部变量中,以后可以轻松重用。
理由: 你可以多次复制和粘贴代码以在不同位置使用它,但最好执行一次操作,将结果存储在局部变量中,并在整个过程中使用该局部变量。
操作方法
- 将光标置于要分配给新局部变量的表达式上。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 从以下选项中选择
选择 引入局部变量 -> 为 <表达式> 引入局部变量

选择 引入局部变量 -> 为所有 <表达式> 出现位置引入局部变量
引入参数
操作: 让你能立即生成新参数以替换现有表达式。
时机: 你有一些代码,如果放在参数中,以后可以轻松重用。
理由: 你可以多次复制和粘贴代码以在不同位置使用它,但最好执行一次操作,将结果存储在参数中,并在整个过程中使用该参数。
操作方法
- 将光标置于要分配给新参数的表达式上。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 从以下选项中选择
选择 为 <表达式> 引入参数 -> 并直接更新调用站点

选择 为 <表达式> 引入参数 -> 进入提取的方法

选择 为 <表达式> 引入参数 -> 进入新重载

引入 using 语句
操作: 为你的 IDisposable 实例添加 using 语句 / 代码块。
时机: 你有一个 IDisposable 实例,并希望确保它被正确获取、使用和释放。
操作方法
- 将光标置于要分配给新参数的表达式上。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 引入
using语句。

反转条件表达式和逻辑运算
操作: 让你能反转条件表达式或条件 and \ or 运算符。
时机: 你有一个条件表达式或条件 and \ or 运算符,如果反转,理解效果会更好。
理由: 手动反转表达式或条件 and \ or 运算符可能需要更长时间,并可能引入错误。此代码修复可帮助你自动执行此重构。
操作方法
- 将光标置于条件表达式或条件
and\or运算符中。 - 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 反转条件 或 用
||替换&&


反转 if
操作: 让你能在不更改代码含义的情况下反转 if 或 if else 语句。
时机: 当你有一个 if 或 if else 语句,反转后理解效果会更好时。
理由: 手动反转 if 或 if else 语句可能需要更长时间,并可能引入错误。此代码修复可帮助你自动执行此重构。
操作方法
- 将光标置于
if或if else语句中。 - 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 反转
if。

使成员静态化
操作: 使成员静态化。
时机: 你希望非静态成员变为静态。
理由: 静态成员提高了可读性:知道特定的代码是孤立的,使其更易于理解、重读和重用。
操作方法
- 将光标置于成员名称上。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 使静态。

将声明移至引用附近
操作: 让你能将变量声明移至靠近它们使用的地方。
时机: 你有一些变量声明可以置于更窄的范围内。
理由: 你可以保持现状,但这可能会导致可读性问题或信息隐藏。这是一个通过重构来提高可读性的机会。
操作方法
- 将光标置于变量声明中。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 将声明移至引用附近。

将类型移至匹配的文件中
操作: 让你能将选定类型移动到同名的单独文件中。
时机: 你在同一文件中拥有多个要分开的类、结构体、接口等。
理由: 在同一文件中放置多种类型可能会导致查找这些类型变得困难。通过将类型移动到同名文件,代码变得更易读且更易于导航。
操作方法
- 将光标置于定义类型的类型名称内。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 将类型移动到 <类型名>.cs。

反转 for 语句
操作: 让你能反转 for 语句。
时机: 当你想反转 for 语句的含义及其迭代方式时使用。
理由: 手动反转 for 语句可能需要更长时间,并可能引入错误。此代码修复可帮助你自动执行此重构。
操作方法
- 将光标置于
for语句中。 - 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 反转
for语句。

拆分或合并 if 语句
操作: 拆分或合并 if 语句。
时机: 你想将使用 && 或 || 运算符的 if 语句拆分为嵌套的 if 语句,或者将 if 语句与外部 if 语句合并。
理由: 这是风格偏好的问题。
操作方法
如果你想拆分 if 语句
- 将光标置于
if语句中&&或||运算符旁。 - 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 拆分为嵌套的
if语句。

如果你想将内部 if 语句与外部 if 语句合并
- 将光标置于内部
if关键字中。 - 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 与嵌套的
if语句合并。

使用显式类型
操作: 使用此重构将局部变量声明中的 var 替换为显式类型。
理由: 为了提高代码的可读性,或者当你不想在声明时初始化变量时。
但是,当变量使用匿名类型初始化并且稍后访问对象的属性时,必须使用 var。有关详细信息,请参阅 隐式类型局部变量 (C#)。
操作方法
- 将光标置于
var关键字上。 - 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 使用显式类型代替
var。

使用隐式类型
操作: 使用此重构将局部变量声明中的显式类型替换为 var。
理由: 以符合你个人的编码约定,并减少显示的冗余代码。Var 必须在变量使用匿名类型初始化且稍后访问对象属性时使用。有关详细信息,请参阅 隐式类型局部变量 (C#)。
操作方法
- 将光标置于显式类型关键字上。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 使用隐式类型。

使用 lambda 表达式或块体
操作: 让你能重构 lambda 表达式以使用表达式体或块体。
时机: 你更喜欢 lambda 表达式使用表达式体或块体。
理由: 可以根据你的用户偏好重构 lambda 表达式以提高可读性。
操作方法
- 将光标置于 lambda 运算符右侧。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择以下选项之一
选择 为 lambda 表达式使用块体。

选择 为 lambda 表达式使用表达式体。

使用递归模式
操作: 将代码块转换为使用递归模式。此重构适用于 switch 语句、属性模式匹配、元组模式匹配和位置模式匹配。
时机: 使用递归模式可以使你的代码更易读 / 更整洁。
操作方法
- 将光标置于要转换为递归模式的表达式上。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择以下选项之一
选择 将 switch 语句转换为表达式。

选择 使用递归模式。


包装、缩进和对齐重构
包装并对齐调用链
操作: 让你能包装并对齐方法调用链。
时机: 你有一个由一个语句中的几个方法调用组成的长链。
理由: 当长列表根据用户偏好进行包装或缩进时,阅读起来会更容易。
操作方法
- 将光标置于任何调用链中。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 包装调用链 或 包装并对齐调用链 以接受重构。

包装、缩进并对齐参数或实参
操作: 让你能包装、缩进并对齐参数或实参。
时机: 你有一个具有多个参数或实参的方法声明或调用。
理由: 当长参数或实参列表根据用户偏好进行包装或缩进时,阅读起来会更容易。
操作方法
- 将光标置于参数列表中。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 从以下选项中选择
选择 包装每个参数 -> 对齐包装的参数

选择 包装每个参数 -> 缩进所有参数

选择 包装每个参数 -> 缩进包装的参数

包装二元表达式
操作: 让你能包装二元表达式。
时机: 你有一个二元表达式。
理由: 当二元表达式按用户偏好进行包装时,阅读起来会更容易。
操作方法
- 将光标置于二元表达式中。
- 按 ⌘. (Windows, Linux Ctrl+.) 以触发 快速操作和重构 菜单。
- 选择 包装表达式 以接受重构。
