ReSharper 2025.2 Help

上下文操作

上下文操作是直接在编辑器中可用的代码转换助手。 与 快速修复 不同,上下文操作并不旨在解决问题或改进您的代码,而是允许您快速引入一些小的更改,例如更改访问修饰符、生成检查 null 的代码、将 'foreach' 转换为 'for' 等。

ReSharper 在所有支持的语言中提供了数百种上下文操作。 You can find the full list on the 代码编辑 | 上下文操作 page of ReSharper 选项 Alt+R, O and in the 上下文操作列表.

应用上下文操作

一旦某个上下文操作在当前光标位置可用,ReSharper 会在光标左侧显示相应的 操作指示器 ThemedIcon.ContextAction.Screen.(Gray).png。 然而,有时 ReSharper 会为当前光标位置提供多个上下文相关的功能。 在这种情况下,会显示与优先级最高的操作对应的操作指示器,其他所有操作仅在您通过单击操作指示器或按下 Alt+Enter 展开 操作列表 时才会出现。上下文操作的优先级最低,因此它们通常出现在操作列表的底部。

操作列表

在大多数情况下,上下文操作会立即应用。 然而,有些操作需要用户交互以选择它们如何精确地转换您的代码。 在这些情况下,编辑器中会部署一个 热点会话 ,您可以在其中选择建议的值之一或在活动输入位置提供您自己的值。

例如,当您应用 通过 'foreach' 遍历集合 上下文操作时,会发生以下情况:

上下文操作. foreach 1

创建 foreach 语句后,一个热点会话将帮助您完成生成语句的可编辑参数:

上下文操作. foreach 2

完成热点会话:

  • 如果 ReSharper 为当前参数建议了一些值,使用 箭头键浏览建议值列表,或者直接输入所需的值。

  • 按下 标签页 输入 以接受值并移动到下一个参数的输入位置。 如果这是最后一个参数,热区会话将完成,插入符号将移动到为会话定义的结束位置。

  • 按下 Shift+Tab 以将输入焦点移动到上一个参数的输入位置。

  • 按下 Esc 以退出热区会话。 在这种情况下,所有会话参数将使用默认值进行初始化。

配置上下文操作

默认情况下,大多数上下文操作是启用的,但您可以轻松禁用那些您认为无用的操作。

  1. 从主菜单中选择 ReSharper | 选项 或按 Alt+R O

  2. 选项 对话框的搜索字段中查找特定的上下文操作。

    或者,打开 代码编辑 | 上下文操作 页面,查找您想要禁用的上下文操作。

  3. 清除上下文操作旁边的复选框以禁用它。

  4. 单击 选项 对话框中的 保存 应用修改,让 ReSharper 选择保存位置,或者通过从 保存到 选择器中选择特定的设置层来保存修改。 有关更多信息,请参见 管理和共享 resharper 设置

在更广的范围内应用上下文操作

某些上下文操作可以在更大的范围内自动查找并更改类似的代码项——在当前文件、当前项目或整个解决方案中。 这些上下文操作的工作方式与 在范围内修复 相同。 例如,您可以将当前文件中的所有类型移动到新的匹配文件中:

在更广的范围内应用上下文操作

可以在更广范围内应用的上下文操作的完整列表包括:

C++

  • 按声明顺序对定义排序

C#

  • 添加另一个访问器

  • 将块大括号添加到 switch 部分语句

  • 添加大括号

  • 添加析构模式组件名称

  • 添加匿名属性的显式名称

  • 为参数添加名称

  • 添加元组组件名称

  • 向 '#pragma' 指令添加警告描述注释

  • 在 'set' 与 'init' 访问器之间更改

  • 截断列表式语言构造的格式设置

  • 将匿名类型转换为元组

  • 将数组创建或集合初始化转换为集合表达式

  • 将集合初始值设定项转换为 'Add' 方法调用

  • 将显式实现转换为隐式实现

  • 将表达式体成员转换为语句体

  • 将表达式转换为 'StringBuilder'

  • 将表达式转换为 'StringBuilder' 调用

  • 将隐式接口实现转换为显式接口实现

  • 将整数字面量转换为二进制形式

  • 将整数字面量转换为十六进制形式

  • 将整数字面量转换为十进制形式

  • 将成员值检查表达式转换为递归模式

  • 将多行字符串转换为单独的 'AppendLine' 调用

  • 将非 null 检查转换为对象模式检查

  • 将对象初始值设定项转换为赋值语句

  • 将对象初始值设定项转换为构造函数调用

  • 将字符串内插转换为字符串串联

  • 将字符串内插转换为 'string.Format' 调用

  • 将 'switch' 表达式转换为条件 ?: 表达式

  • 将 'switch' 表达式转换为 'if' 语句

  • 将 'switch' 表达式转换为 'switch' 语句

  • 将 'switch' 语句转换为 'if' 语句

  • 将 'switch' 语句转换为 'switch' 表达式

  • 转换为数组创建表达式

  • 转换为集合初始值设定项

  • 转换为单独的 'Append' 和 'AppendLine' 调用

  • 转换为 'using' 语句

  • 将逐字字符串内插转换为原始字符串内插

  • 将逐字字符串字面量转换为原始字符串字面量

  • 将 'with' 表达式转换为临时变量变更

  • 从 'params' 形参实参创建集合表达式

  • 通过 'params' 形参实参创建显式数组创建

  • 从 'params' 形参实参创建显式集合

  • 为主构造函数创建显式构造函数声明

  • 为主构造函数的形参创建显式字段声明

  • 为位置形参创建显式属性声明

  • 删除注释

  • 完全限定对类型、static 成员或命名空间的引用

  • 将成员访问包含到对象模式中

  • 内联临时变量

  • 内联 using 别名

  • 将变量内联到条件表达式中

  • 在整数字面量中插入数字分隔符

  • 在实数字面量中插入数字分隔符

  • 插入泛型方法调用类型实参

  • 插入 lambda 表达式形参签名

  • 插入 lambda 表达式返回值类型规范

  • 在默认字面量之后插入类型规范

  • 将扩展方法作为普通 static 方法进行调用

  • 将特性加入单个部分

  • 联接局部变量声明和赋值

  • 将顺序检查合并到 null 传播表达式中

  • 将顺序 null/模式检查合并到单个模式检查中

  • 迁移到 #nullable enable

  • 将注解移动到分部声明的另一部分

  • 将构造函数中的赋值移至初始值设定项

  • 将类型移至另一个文件以匹配其名称

  • 限定通过 'using static' 指令导入的 static 成员

  • 移除 #region, #endregion 指令(参见 添加和移除 #region 块

  • 移除参数名称

  • 移除析构模式组件名称

  • 移除数值字面量中的数字分隔符

  • 移除多余的括号(参见 代码语法样式:可选括号

  • 移除元组组件名称

  • 将 '?:' 条件运算符替换为 null 传播表达式

  • 将数组初始值设定项替换为表达式

  • 将自动实现的属性访问器替换为显式实现的访问器

  • 将自动属性替换为属性和支持字段

  • 将自动属性替换为属性和 'field' 关键字

  • 将显式类型规范替换为 'var'

  • 将 'field' 关键字替换为显式字段声明

  • 将 null 传播表达式替换为 '?:' 条件运算符

  • 将单独的析构声明替换为单个声明

  • 将 'var' 替换为显式类型声明

  • 替换为访问表达式

  • 对 'using' 指令排序

  • 指定创建的类型

  • 指定枚举成员值

  • 将 'and' 模式拆分为多个 'is' 表达式或临界表达式

  • 将特性拆分为单独的部分

  • 拆分为嵌套模式

  • 将 list 模式拆分为多个连续的检查

  • 将 null 传播表达式拆分为顺序检查

  • 将 'or' 模式拆分为多个 'is' 表达式或 'switch' case

  • 将递归模式拆分为多个连续的检查

  • 将 'var' 模式拆分为单独变量声明

  • 转换为块作用域的命名空间

  • 转换为文件作用域的命名空间

  • 替换为命名属性模式

  • 使用 'ConfigureAwait(false)' 调用

  • 使用显式弃元声明

  • 使用隐式弃元声明

  • 使用 'nameof' 表达式捕获实体名称

  • 使用对象/集合初始值设定项代替赋值/.Add() 方法调用

  • 使用位置析构模式

  • 在析构声明/模式中使用单独的声明

  • 使用字符串内插

  • 使用目标类型的 new

  • 为具有多个变量的析构声明使用 'var (...)' 语法

TypeScript

  • 将类型移至另一个文件以匹配其名称

Unity

  • 转换为命名程序集定义引用

VB.NET

  • 使用字符串内插

上下文操作列表

使用以下链接查看特定语言可用的上下文操作完整列表:

此功能在以下语言和技术中 受支持

语言:C#

语言:VB.NET

语言:C++

语言:ASP.NET

语言:Razor

语言:XAML

语言:Resx

语言:构建脚本

语言:SQL

此功能在 C# 中可用

此功能在 Visual Basic 中可用

C++ 中的上下文操作

此功能在 ASP.NET 中可用

此功能在 Razor 中可用

此功能在 XAML 中可用

此功能在资源文件中可用

此功能在构建脚本文件中可用

此功能在 SQL/NoSQL 文件和注入中不可用

此处提供的说明和示例针对在 C# 中使用该功能。 有关其他语言的更多信息,请参阅 语言和框架 部分中的相应主题。

最后修改日期: 2025年 9月 27日