Sim*_*itt 0 c# resharper null evaluation
这段代码工作正常:
policy.ProviderID > 0 ? RefDataSources.LegalBodies.GetDisplayName(policy.ProviderID.Value) : null
Run Code Online (Sandbox Code Playgroud)
但是Resharper抱怨policy.ProviderID.Value需要null检查(以防止InvalidOperationException).
据我所知,条件只会对大于的非空值进行求值,0因此不需要进一步检查.
我应该将此记录为JetBrains的错误吗?或者我误解了什么.
我怀疑R#是在抱怨,因为它不知道policy.ProviderID在两次评估中都会返回相同的值.考虑:
private readonly int? providerId;
public int? EvilProviderId => DateTime.UtcNow.Second == 0 ? null : providerId;
Run Code Online (Sandbox Code Playgroud)
现在考虑你的代码 - 条件可能是真的,因为第一次调用是在第二次调用59 ...然后时钟在第二次调用之前滴答,然后返回null,导致a NullReferenceException.
如果这是为什么R#为抱怨,只是提取一个局部变量:
int? providerId = policy.ProviderId;
// Use providerId in both cases in your expression
Run Code Online (Sandbox Code Playgroud)