繁体   English   中英

空值和值组合检查

[英]Combined null and value check

这段代码可以正常工作:

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;

现在考虑您的代码- 条件可能为true,因为第一次调用是在秒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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM