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,请为项目或解决方案添加一个 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 关键字在常规转换和尝试转换 (try cast) 之间转换变量。

时机: 当你预期在某些情况下转换会失败时 (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 方法,也可以同时转换它。选择 用属性替换 <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)。

时机: 当你想快速将类更改为记录,该记录专门用于存储数据和不可变性时。

操作方法

  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

时机: 当你想快速将元组更改为 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. 从以下选项之一中选择

选择 内联 <QualifiedMethodName> 以移除内联方法声明

Inline method example

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

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

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