代码语法样式:隐式/显式类型('var' 关键字)
使用 隐式类型的局部变量 (也称为 var 关键字),自 C# 3.0 引入以来,因其在许多场景中提高了可读性而变得非常流行。 默认情况下,JetBrains Rider 也鼓励使用 var 关键字,但其使用偏好是 灵活可配置的——例如,您可以选择在特定情况下或所有情况下使用显式类型,JetBrains Rider 将帮助您强制执行您的偏好。
从 C# 7.0 开始,您可以在 解构元组时声明局部变量。 如果您更喜欢在此类声明中使用 var ,您还可以配置样式以使用合并或分离的表示法,例如: var (x, y) = GetTuple(); 或 (var x, var y) = GetTuple();。
另一个 C# 7.0 功能是 丢弃 ,它还允许使用 var 以确保范围内没有与可能命名为 _ 的变量冲突。 JetBrains Rider 允许您配置样式以在适当的情况下始终与丢弃一起使用 var。
强制执行使用 'var' 关键字的偏好设置
JetBrains Rider 检查所有局部变量是否符合您的 偏好设置 ,如果不符合,JetBrains Rider 会 高亮显示此类声明,并建议相应的 快速修复或 范围修复。
默认情况下,JetBrains Rider 的偏好设置表明更倾向于使用 'var' 关键字:

如果您更改了偏好设置,JetBrains Rider 将帮助您使用显式类型:

另一种以批量模式强制执行 'var' 关键字使用偏好设置的选项是 代码清理。 您可以使用内置的配置文件之一 运行代码清理 ,例如 完全清理或 重新格式化并应用语法样式 ,或者创建并运行 仅针对特定任务的自定义配置文件 ,如下所述。
使用自定义代码清理配置文件应用 'var' 关键字的偏好设置
按下 Ctrl+Alt+S 或从菜单中选择 (Windows 和 Linux)或 (macOS)。
转到代码清理配置文件设置页面: 。
按照 创建新的自定义清理配置文件 部分中描述的步骤创建一个新配置文件。 在新配置文件的 选定的配置文件设置 部分中,勾选 强制使用 'var' 关键字的设置 复选框。 您还可以选择在此配置文件中启用其他代码清理任务。
在 设置 对话框中点击 保存 以应用修改,并让 JetBrains Rider 选择保存位置,或者通过从 保存 选择器中选择特定设置层来保存修改。 如需了解更多信息,请参见 基于层的设置。
选择您希望强制执行偏好的范围:
将光标放置在文件中的任意位置,以对文件强制执行您的偏好设置。
在 解决方案资源管理器 中选择一个或多个项目,以对这些节点及其子项下的文件强制执行您的偏好设置。
按 Ctrl+R, C 或从主菜单中选择 。
在打开的 重新格式化并清理代码 对话框中,选择新创建的配置文件,并根据需要选择另一个范围。 在打开的 重新格式化并清理代码 对话框中,选择新建的配置文件,并在需要时选择其他作用域。
点击 确定。 JetBrains Rider 将在选定范围内强制执行您的偏好设置。
如果您希望在不打开 重新格式化并清理代码 对话框选择配置文件的情况下强制执行 'var' 关键字使用偏好设置,可以将创建的配置文件绑定到 静默清理 ,并通过按 Ctrl+R, G 运行它。 您还可以创建一个 自定义清理配置文件 ,将应用偏好设置与其他代码样式任务结合起来。
要将 'var' 关键字使用偏好设置与所有其他 格式化和 语法样式规则一起应用于选定的代码块, Alt+Enter 并选择 。
您可以在最近修改并准备提交到 Git 的代码中强制执行 'var' 关键字使用偏好设置。 JetBrains Rider 将在提交之前运行选定的 清理配置文件。
在提交到 Git 之前清理代码
按 Ctrl+K 或从主菜单中选择 。
在 提交 工具窗口中,点击
,并在 提交检查 区域中,选择 清理方式... 复选框。
点击 选择配置文件 并选择您的自定义 Code Cleanup 配置文件。
点击 提交 或 提交并推送。 JetBrains Rider 将在提交暂存的文件中运行代码清理,然后提交更改。
您可以在每次保存文件更改时强制执行 'var' 关键字使用的偏好设置,以确保您的编辑始终符合代码样式。 请注意,这仅在您通过 Ctrl+S 或 Ctrl+S 显式保存更改时发生,不会因 自动保存 而触发。 然而,所有自动保存的文件都会被放入“重新格式化和清理”队列,并将在下次显式保存时处理。
在保存更改时自动强制执行 'var' 关键字使用的偏好设置
按下 Ctrl+Alt+S 打开设置,然后选择 。
选择 重新格式化并清理代码 ,选择您的自定义 Code Cleanup 配置文件,并决定是将其应用于整个文件还是仅应用于更改的行。
下次您完成编辑并保存文件或所有文件时,JetBrains Rider 将使用选定的配置文件清理受影响的文件。
配置使用 'var' 关键字的偏好设置
您的 'var' 关键字使用偏好设置是通过 基于层的设置机制保存的。 此外,该机制允许您为不同的解决方案维护不同的偏好,并将这些偏好保存在 VCS 中,自动与团队成员共享。
在设置/偏好设置对话框中配置使用 'var' 关键字的偏好设置
转到 JetBrains Rider 设置 的 页面 Ctrl+Alt+S ,然后选择 语法样式 选项卡。
根据您的编码实践/标准修改 声明中的 'var' 用法 类别中的设置。
您可以为不同类型设置使用 'var' 或显式类型的不同首选项:
对于内置类型——适用于 C# 内置类型。
对于简单类型——适用于没有泛型参数的类型。
其他地方——适用于泛型类型和解构声明。
对于这些首选项中的每一项,您可以选择使用 'var'、显式类型或 显而易见时使用 'var'。
如果您在上一步中选择了 在明显时使用 'var' ,您可以选择应用 Visual Studio 逻辑来决定哪些情况应被视为显而易见。
要了解 JetBrains Rider 和 Visual Studio 逻辑之间的差异,请参阅 在显而易见时使用 'var':什么被认为是显而易见的?。
默认情况下,JetBrains Rider 会建议在 解构声明中对多个
var使用合并表示法,例如var (x, y) = GetTuple();。 您可以选择 为析构变量首选单独的声明 以选择单独表示法,例如(var x, var y) = GetTuple();。默认情况下,JetBrains Rider 建议对 丢弃使用独立的
_,例如(_, _) = (0, 1);。 您可以选择 将 'var' 关键字用于弃元 以始终在适当的情况下对丢弃使用var,从而确保范围内没有可能命名为_的变量冲突。在 设置 对话框中点击 保存 以应用修改,并让 JetBrains Rider 选择保存位置,或者通过从 保存 选择器中选择特定设置层来保存修改。 如需了解更多信息,请参见 基于层的设置。
您还可以直接在编辑器中更改使用 'var' 关键字的偏好设置,其中会高亮显示相应的问题:
从编辑器中更改使用 'var' 关键字的偏好设置
在显而易见时使用 'var':什么被认为是显而易见的?
在 配置使用 'var' 关键字与显式类型的首选项时,您可以选择 在明显时使用 'var'。 此选项看起来不言自明,但在某些情况下,可能不清楚什么被认为是“显而易见的”,什么不是。
除此之外,JetBrains Rider 和 Visual Studio 在建议使用 'var' 关键字或显式类型时,对“显而易见”的定义也存在一些差异。
The table below shows in which cases initializers that could be declared 'var' are considered evident depending on the state of the 为类型证据首选 Roslyn (Visual Studio)逻辑 checkbox on the page of JetBrains Rider 设置 Ctrl+Alt+S.
初始化器表达式 | 示例 | 关 | 开 |
|---|---|---|---|
对象创建表达式 |
| 显而易见 | 显而易见 |
强制转换表达式 |
| 显而易见 | 显而易见 |
|
| 显而易见 | 显而易见 |
文字表达式 |
| 显而易见 | 显而易见 |
默认表达式 |
| 显而易见 | 显而易见 |
元组表达式 |
| 当所有组件表达式都显而易见时显而易见 | |
显式数组创建表达式 |
| 显而易见 | 显而易见 |
隐式数组创建表达式 |
| 当所有元素初始化器(最多 42 个)显而易见时显而易见 | 不显而易见 |
非泛型工厂(创建)方法(在某些类型中声明的静态方法并返回相同类型的值) |
| 当方法名称包含父类型名称或以下子字符串之一时显而易见:"Create"、"Build"、"Construct"、"Make"、"Generate"、"Produce"、"New"、"Instance" | 显而易见 |
泛型工厂(创建)方法(返回泛型类型并在与返回类型同名的类中声明的静态方法) |
| 当所有方法调用参数显而易见且方法名称包含以下子字符串之一或类名时显而易见:"Create"、"Build"、"Construct"、"Make"、"Generate"、"Produce"、"New"、"Instance" | 显而易见 |
转换方法(名称由 "To" 加上返回类型名称组成的方法) |
| 当返回类型不是泛型时显而易见 | 显而易见 |
具有显式类型参数并返回该类型参数值的泛型方法 |
| 显而易见 | 不显而易见 |
枚举成员 |
| 显而易见 | 不显而易见 |
单例字段(返回声明它们的类型值的静态/常量字段) |
| 当字段名称包含类型名称或以下子字符串之一时显而易见:"Empty"、"Instance"、"Default"、"Value" | 不显而易见 |
