簡體   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