如何解决避免在 C# 使用不能为 null 的参数调用我的方法时发出警告 在评论中编辑以下讨论
我已阅读 C# 可为空引用类型的 docs。
一个简单的 EF Core 示例:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.ApplyConfiguration(new CustomerConfiguration()); // <--- CA1062
}
这会引发警告 CA1062:
在外部可见方法“void DbContext.OnModelCreating(ModelBuilder builder)”中,使用前验证参数“builder”是否为非空。如果合适,当参数为空时抛出 ArgumentNullException 或添加一个代码契约前提条件断言非空参数。 csharp(CA1062)
我认为框架不会向我发送 null,所以我认为检查 null 没有意义。
我如何处理这种情况,即:框架使用不能为空的参数调用我的方法?
编辑:我的问题与链接的问题不同,因为它是通用的,并且专门询问 C# 8 的 NRT 功能。我只选择了一个相关的例子。无论如何,感谢所有帮助过的人。
解决方法
根据我的评论,如果 ?.
不是 ApplyConfiguration
,您可以使用 null-conditional operator builder
仅调用 null
方法:
builder?.ApplyConfiguration(new CustomerConfiguration());?
来自文档:
空条件运算符应用成员访问、?.
或元素
访问,?[]
,仅当该操作数求值时对其操作数进行操作
非空;否则返回null。
在评论中编辑以下讨论
我认为包含一个 OP 已经知道的替代方案是有意义的,但我将展示一个更全面的解决方案。
与其使用空条件运算符(它实际上会隐藏任何问题,因为 builder
实际上是 null
),只需在方法的开头测试 builder
:
protected override void OnModelCreating(ModelBuilder builder) {
if (builder == null) throw new ArgumentNullException(nameof(builder));
base.OnModelCreating(builder);
...
这将是处理 null
值 builder
的更全面的方法,因为如果您收到 null
到 malloc()
方法。
另一个选项是禁用诊断 CA1062,如果您认为该规则不会在您的场景中增加任何价值。
您可以在不同级别以不同方式禁用诊断。使用 .editorconfig
文件应用于磁盘上的给定子树。使用 #pragma
或 GlobalSuppressions.cs
抑制代码中的特定区域。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。