合并空值和值检查

时间:2015-11-10 11:32:15

标签: c# null resharper evaluation

此代码可以正常工作:

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

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

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

我应该将此记录为JetBrains的错误吗? 或者我误解了什么。

2 个答案:

答案 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