上下文操作
上下文操作是直接在编辑器中可用的代码转换助手。 与 快速修复不同,上下文操作并不旨在解决问题或改进您的代码,而是允许您快速引入一些小的更改,例如更改访问修饰符、生成检查 null 的代码、将 'foreach' 转换为 'for' 等。
JetBrains Rider 在所有支持的语言中提供了数百种上下文操作。 You can find the full list on the page of JetBrains Rider 设置 Ctrl+Alt+S and in the 上下文操作列表.
应用上下文操作
一旦某个上下文操作可用于当前插入点位置,JetBrains Rider 会在插入点左侧显示相应的 操作指示器
。 然而,有时 JetBrains Rider 会为当前插入点位置提供多个上下文相关的功能。 在这种情况下,与优先级最高的操作对应的操作指示器会显示,其他所有操作仅在您通过单击操作指示器或按下 Alt+Enter 展开 操作列表 时才会出现。上下文操作的优先级最低,因此它们通常出现在操作列表的底部。

在大多数情况下,上下文操作会立即应用。 然而,有些操作需要用户交互以选择具体如何转换您的代码。 在这些情况下,会在编辑器中部署一个 热点会话 ,您可以在其中选择建议的值之一或在活动输入位置提供您自己的值。
例如,当您应用 通过 'foreach' 遍历集合 上下文操作时,会发生以下情况:

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

完成热点会话的方法:
如果 JetBrains Rider 为当前参数建议了一些值,请使用 上 和 下 箭头键浏览建议值列表,或者直接键入所需的值。
按 标签页 或 输入 接受值并移动到下一个参数的输入位置。 如果这是最后一个参数,会话热点将完成,插入点将移动到为会话定义的结束位置。
按 Shift+Tab 键 将输入焦点移动到上一个参数的输入位置。
按 Esc 退出热区会话。 在这种情况下,所有会话参数将使用默认值进行初始化。
配置上下文操作
禁用上下文操作
按下 Ctrl+Alt+S 或从菜单中选择 (Windows 和 Linux)或 (macOS)。
使用 设置/首选项 对话框中的搜索字段查找特定的上下文操作。
或者,打开 页面,查找您想要禁用的上下文操作。
清除上下文操作旁边的复选框以禁用它。
在 设置 对话框中点击 保存 以应用修改,并让 JetBrains Rider 选择保存位置,或者通过从 保存 选择器中选择特定设置层来保存修改。 如需了解更多信息,请参见 基于层的设置。
为上下文操作分配快捷键
在编辑器中,将文本光标放置在触发 上下文操作 的代码处,您要为其分配快捷方式,然后点击灯泡图标或按下 Alt+Enter。
可用建议列表打开。
在列表中,点击
所需的 上下文操作 旁边,并从展开的菜单中选择 分配快捷键…。
当 键盘快捷键 对话框打开时,按下您想要用于此操作的快捷键,然后点击 确定。
之后,您无需打开建议列表即可在编辑器中应用此 上下文操作—只需按下配置的快捷键即可立即执行。
您可以在设置中找到所有自定义 上下文操作 快捷方式:按 Ctrl+Alt+S ,点击 按键映射 ,并找到 意图 类别。
在更广的范围内应用上下文操作
某些上下文操作可以在更大的范围内自动查找并更改类似的代码项——当前文件、当前项目或整个解决方案中。 这些上下文操作的工作方式与 在范围内修复 相同。 例如,您可以将当前文件中的所有类型移动到新的匹配文件中:

可以在更广范围内应用的上下文操作的完整列表包括:
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
使用字符串内插
上下文操作列表
使用以下链接查看特定语言可用的上下文操作完整列表: