这怎么可能是一个空引用?

时间:2017-09-18 00:22:07

标签: c# visual-studio-2015 resharper

Current.Images?.Count > 0 ? $"{Current.Images.Count} Image(s)" : "Enter Image";

Resharper认为Current.Images.Count可以是空引用。它很好地确定某些东西是否可以为空,这让我想知道我是否遗漏了某些东西。

我的逻辑:条件可以为真的唯一方法是如果Images不为null并且实际上至少有一个值。

编辑:问题是与Current。此时它不能为空,Resharper知道这一点。

3 个答案:

答案 0 :(得分:1)

在R#2017.2中它是a bug,它将在即将到来的R#2017.2.1错误修正更新中修复。

答案 1 :(得分:0)

如果current是a varable,你应该验证它不是null:

((Current ?? throw new NullReferenceException(nameof(Current)).Images?.Count > 0) 
    ? $"{Current.Images.Count} Image(s)" 
    : "Enter Image";

(这个例子在第一行附近有大括号,主要是为了可读性。因为在某些情况下,空合并表达式会完全评估为null,并且您在编写代码的过程中无法确定在这种情况下是否属于这种情况决定是否支持这种方式取决于你团队的代码风格偏好)

此外,将代码扩展到多行可帮助您找出出错的部分。

如果Current是静态类,则Resharper似乎是错误的。您可以指示resharper忽略此实例(在您的代码中)或忽略每个实例(在resharper设置中)

答案 2 :(得分:0)

Resharper将您的代码标记为可能的空引用异常,因为您不检查Current.Images是否为null,字符串文字中的 ..

您的代码:

Current.Images?.Count > 0 ? $"{Current.Images.Count} Image(s)" : "Enter Image";

安全代码:

Current.Images?.Count > 0 ? $"{Current.Images?.Count} Image(s)" : "Enter Image";
                                 missing ____^
相关问题