JetBrains Rider 2025.2 Help

生成空值检查例程

JetBrains Rider 提供了多种不同的方法来生成检查值类型参数、表达式和变量是否为空的代码。 根据其用途,空值检查例程可以分为两类:

针对异常和断言的空值检查

在某些情况下,遇到 null 引用的对象对您的程序至关重要,应该记录或通过抛出异常发出信号。 这里的一个典型示例是在一个不设计接受 null 对象的函数中抛出 ArgumentNullException

生成针对异常和断言的空值检查

您可以通过以下方式生成这些类型的空值检查:

  • 在参数或表达式上按 Alt+Enter 并选择相应的 上下文操作

    JetBrains Rider:检查参数是否为空
  • 如果参数标记有 [NotNull]属性,您可以将插入点直接放在参数名称或参数类型之后并按

    private void Foo([NotNull] object/*!*/ arg/*!*/)
  • 生成构造函数时(Alt+Insert| 构造函数 ),请在对话框中选择 检查参数是否为 null

  • 要为任何可为空的表达式 null 生成断言,JetBrains Rider 提供了 断言表达式是否为空 操作,位于 Alt+Enter。 根据 可空性分析设置 ,它会显示为 快速修复上下文操作

    JetBrains Rider:断言表达式是否为空

    如果 JetBrains Rider 推断表达式永远不会是 null ,则此操作将不可用。

如果您在项目中 使用代码注解 ,JetBrains Rider 会使用 [NotNull]属性装饰您检查是否为 null 的参数。 这将使 JetBrains Rider 在将 null 对象传递给已装饰的参数时通知您。

You can disable adding [NotNull] by clearing the 自动传播注解 checkbox on the 编辑器 | 检查设置 | 代码注解 page of JetBrains Rider 设置 Ctrl+Alt+S.

配置针对异常和断言的空值检查

This kind of null checks can be written in different ways, so they are configurable on the 编辑器 | 代码样式 | C# | 空值检查 page of JetBrains Rider 设置 Ctrl+Alt+S, which is also accessible from the Alt+Enter menu on the corresponding actions:

JetBrains Rider:配置空值检查模式的快捷方式

此 设置 页面按优先级顺序列出了所有预定义的 null 检查模式,优先级较高的模式显示在顶部。 当 JetBrains Rider 生成 null 检查时,它将选择语义上适合上下文的最高优先级模式,同时考虑当前的 C# 版本。

默认情况下,JetBrains Rider 会根据关联的编译器自动检测 C# 版本。 不过,您可以 为项目明确指定目标 C# 版本——在解决方案资源管理器中按下 Alt+Enter ,并在 应用程序 页面的 项目属性 对话框中使用 语言版本 选择器。

要为 解决方案中的所有项目设置 C# 版本,请按照 此处的说明,在解决方案目录中的 Directory.Build.props 文件中指定它。

例如,在默认配置下,'throw expression' 模式 $EXPR$ ?? new System.ArgumentNullException($NAME$); 的优先级高于 'classic' throw 语句 if ($EXPR$ == null) throw new System.ArgumentNullException($NAME$);。 但如果当前上下文中不允许表达式,JetBrains Rider 将跳过第一个模式并使用第二个模式:

// Press Alt+Enter on 'arg' and choose 'Check parameter for null' private void Foo(object arg) { // as expression is not allowed here, the statement is generated: if (arg == null) throw new ArgumentNullException(nameof(arg)); } // However, in the following case the expression is already there private object myField; private void Foo(object arg) { myField = arg; } // so JetBrains Rider will use the first pattern: private object myField; private void Foo(object arg) { myField = arg ?? throw new ArgumentNullException(nameof(arg)); }

生成断言时也是如此:JetBrains Rider 将使用标记为 可用于断言 的第一个模式。

如果您对生成 null 检查有任何偏好,请使用 设置 页面上的 向上移动 Alt+U /向下移动 Alt+D 按钮提高您偏好的模式的优先级。

创建针对异常和断言的自定义空值检查

如果您的代码库提供了专门用于处理 null 检查的辅助方法,您可能希望通过编辑 设置 页面上以粗体显示的两个自定义模式——自定义(语句)自定义(表达式) ,来创建自己的 null 检查模式:

JetBrains Rider:自定义空值检查模式

默认情况下,这两个模式的优先级最低,这意味着它们永远不会用于生成。 因此,如果您打算使用它们,请将它们上移以提高优先级。

当列表中选择了一个自定义模式时,您可以在页面底部的文本字段中使用 $EXPR$$NAME$$MESSAGE$ 占位符对其进行编辑。 只要模式有效,JetBrains Rider 就会在文本字段下方显示相应的图标。

您还可以勾选 可用于断言 复选框,使模式与 断言表达式是否为空 操作一起工作。

跳过具有空值的对象的空值检查

另一种空值检查用于避免在 null 引用对象上访问成员,在您的程序中允许跳过此类对象的情况下:

if (expr != null) { DoSomething(); } // or, starting from C#6.0, with the conditional access operator: (expr)?.DoSomething();

要生成此类检查,JetBrains Rider 提供了 检查表达式是否为 null使用条件访问 操作,适用于 Alt+Enter。 根据 空值分析设置 ,这些操作会显示为 快速修复上下文操作

JetBrains Rider:检查表达式是否为空的快速修复

但是,如果 JetBrains Rider 推断表达式永远不会返回 null ,例如对应的项标记了 [NotNull] 属性或表达式已检查空值,则这些操作将不可用。

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