此代码可以正常工作:
policy.ProviderID > 0 ? RefDataSources.LegalBodies.GetDisplayName(policy.ProviderID.Value) : null
但Resharper抱怨policy.ProviderID.Value
需要null
检查(以阻止InvalidOperationException
)。
据我所知,对于大于0
的非空值,条件只会求值为true,因此不需要进一步检查。
我应该将此记录为JetBrains的错误吗? 或者我误解了什么。
答案 0 :(得分:6)
我怀疑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
答案 1 :(得分:0)
请改用:
(policy != null && policy.ProviderID.HasValue && policy.ProviderID. Value > 0) ? RefDataSources.LegalBodies.GetDisplayName(policy.ProviderID.Value) : null