生成空值检查例程
ReSharper 提供了多种不同的方法来生成检查值类型参数、表达式和变量是否为空的代码。 根据其用途,空值检查例程可以分为两类:
用于异常和断言的空值检查
在某些情况下,遇到一个 null 引用对象对您的程序至关重要,应该记录或通过抛出异常发出信号。 一个典型的例子是在一个不设计接受 null 对象的函数中抛出 ArgumentNullException。
为异常和断言生成空值检查
您可以通过以下方式生成此类空值检查:
在参数或表达式上按下 Alt+Enter 并选择相应的 上下文操作:

如果参数标记了 [NotNull] 属性,您可以将光标直接放在参数名称或参数类型之后并按下 ! :
private void Foo([NotNull] object/*!*/ arg/*!*/)当 生成构造函数 (Alt+Insert )时,在对话框中选择 检查参数是否为空。
To generate an assertion for
nullfor any nullable expression, ReSharper provides the 断言表达式是否为空 action on Alt+Enter. 根据 空值分析设置 ,它会显示为 快速修复 或 上下文操作。
如果 ReSharper 推断表达式永远不会为
null,则此操作将不可用。
如果您在项目中 使用代码注解 ,ReSharper 会为您检查空值的参数添加 [NotNull] 属性。 这将使 ReSharper 在空对象传递给已装饰的参数时通知您。
You can disable adding [NotNull] by clearing the 自动传播注解 checkbox on the page of ReSharper 选项
Alt+R, O
.
配置用于异常和断言的空值检查
This kind of null checks can be written in different ways, so they are configurable on the page of ReSharper 选项 Alt+R, O , which is also accessible from the Alt+Enter menu on the corresponding actions:

此 选项 页面按优先级顺序列出了所有预定义的空值检查模式,优先级较高的模式显示在顶部。 当 ReSharper 生成空值检查时,它将选择语义上适合上下文的最高优先级模式,同时考虑当前的 C# 版本。
默认情况下,ReSharper 会根据关联的编译器自动检测 C# 版本。 但是,您可以明确指定目标 C# 版本 用于某个项目——在解决方案资源管理器中右键单击项目,从上下文菜单中选择 编辑项目项属性 ,并使用 C# 语言级别 选择器。
要为 解决方案中的所有项目设置 C# 版本,请在解决方案目录中的 Directory.Build.props 文件中指定,如 此处所述。
例如,在默认配置下,'throw expression' 模式 $EXPR$ ?? new System.ArgumentNullException($NAME$); new System.ArgumentNullException($NAME$); 的优先级高于 'classic' throw 语句 if ($EXPR$ == null) throw new System.ArgumentNullException($NAME$);。 但如果当前上下文中不允许使用表达式,ReSharper 将跳过第一个模式并使用第二个模式:
生成断言时也是如此:ReSharper 将使用标记了 可用于断言 的第一个模式。
如果您对生成空值检查有任何偏好,请使用 选项 页上的 上移 Alt+U /下移 Alt+D 按钮来提高您偏好的模式的优先级。
创建用于异常和断言的自定义空值检查
如果您的代码库提供了专门的辅助方法来处理空值检查,您可能希望通过编辑 选项 页上以粗体显示的两个自定义模式 自定义(语句) 和 自定义(表达式) 来创建自己的空值检查模式:

默认情况下,这两个模式的优先级最低,这意味着它们永远不会被用于生成。 因此,如果您打算使用它们,请将它们上移以提高其优先级。
当列表中选择了一个自定义模式时,您可以在页面底部的文本字段中使用 $EXPR$、 $NAME$、 $MESSAGE$ 占位符对其进行编辑。 只要模式有效,ReSharper 就会在文本字段下方显示相应的图标。
您还可以勾选 可用于断言 复选框,使该模式适用于 断言表达式是否为空 操作。
跳过具有空值的对象的空值检查
另一种空值检查用于避免在 null 引用的对象上访问成员,在这种情况下,跳过这些对象对您的程序是可以接受的:
要生成此类检查,ReSharper 提供了 检查表达式是否为 null 和 使用条件访问 操作,适用于 Alt+Enter。 根据 空值分析设置 ,这些操作会显示为 快速修复 或 上下文操作。

但是,如果 ReSharper 推断表达式永远不会返回 null ,例如对应的项标记了 [NotNull] 属性或表达式已被检查为空值,则这些操作将不可用。
此功能在以下语言和技术中 受支持: