组合空值和值检查

Combined null and value check

这段代码工作正常:

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

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

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

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

我怀疑 R# 正在抱怨,因为它不知道 policy.ProviderID 将 return 两次评估的值相同。考虑:

private readonly int? providerId;

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

现在考虑您的代码 - 条件 可能为真,因为第一次调用是在第 59 秒执行的...但是时钟在第二次调用之前滴答作响,然后return 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