组合空值和值检查

本文关键字:检查 空值 组合 | 更新日期: 2023-09-27 18:21:17

这段代码工作正常:

policy.ProviderID > 0 ? RefDataSources.LegalBodies.GetDisplayName(policy.ProviderID.Value) : null

但Resharper抱怨policy.ProviderID.Value需要null检查(以防止InvalidOperationException(。

据我所知,对于大于 0 的非空值,条件只会计算为 true,因此不需要进一步检查。

我应该将其记录为 JetBrains 的错误吗?还是我误解了什么。

组合空值和值检查

我怀疑 R# 在抱怨,因为它不知道policy.ProviderID会在两个评估中返回相同的值。考虑:

private readonly int? providerId;
public int? EvilProviderId => DateTime.UtcNow.Second == 0 ? null : providerId;

现在考虑你的代码 - 条件可能是真的,因为第一次调用是在第二个 59 上执行的......但随后时钟在第二次调用之前滴答作响,然后返回 null,导致NullReferenceException

如果这就是 R# 抱怨的原因,只需提取一个局部变量:

int? providerId = policy.ProviderId;
// Use providerId in both cases in your expression

请改用这个:

(policy != null && policy.ProviderID.HasValue &&  policy.ProviderID. Value > 0) ? RefDataSources.LegalBodies.GetDisplayName(policy.ProviderID.Value) : null