[英]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.