ReSharper 2025.3 Help

Null 检查

ReSharper 选项:代码编辑 | C# | 空值检查

使用此页面自定义生成用于异常和断言的空值检查例程。

用于异常和断言的空值检查

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

为异常和断言生成空值检查

您可以通过以下方式生成此类空值检查:

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

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

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

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

    ReSharper:断言表达式是否为空

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

如果您在项目中 使用代码注解 ,ReSharper 将使用 [NotNull]属性装饰您检查空值的参数。 这将使 ReSharper 在空对象传递给装饰参数时通知您。

您可以在 ReSharper 选项 代码检查 | 代码注解 Alt+R, O 页面上清除 自动传播注解 复选框,以禁用添加 [NotNull]

配置用于异常和断言的空值检查

此类空值检查可以用不同的方式编写,因此,您可以在 ReSharper 选项 Alt+R, O 代码编辑 | C# | 空值检查 页面进行配置;该页面也可通过相应操作上的 Alt+Enter 菜单访问:

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

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

默认情况下,ReSharper 会根据关联的编译器自动检测 C# 版本。 但是,您可以明确指定目标 C# 版本 用于项目 — 在解决方案资源管理器中右键单击项目,从上下文菜单中选择 编辑项目项属性 ,并使用 C# 语言级别 选择器。

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

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

// 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 ReSharper will use the first pattern: private object myField; private void Foo(object arg) { myField = arg ?? throw new ArgumentNullException(nameof(arg)); }

同样适用于生成断言:ReSharper 将使用标记有 可用于断言 的第一个模式。

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

创建用于异常和断言的自定义空值检查

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

ReSharper:自定义空值检查模式

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

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

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

最后修改日期: 2025年 12月 8日