组合空值和值检查
本文关键字:检查 空值 组合 | 更新日期: 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