2011-05-10 52 views
4
public class BloodPressure { 
    public Int16? Diastolic { get; set; } 

    private Boolean IsValid { 
     get { 
      var valid = false; 

      if (this.Diastolic.HasValue && this.Systolic.HasValue) { 
       if ((this.Diastolic.Value >= 0) && (this.Systolic.Value >= 0)) { 
        valid = true; 
       } 
      } 

      return (valid); 
     } 
    } 

    public Int16? Systolic { get; set; } 

    public override String ToString() { 
     var result = ""; 

     if (this.IsValid) { 
      result = this.Systolic.Value.ToString("0") + "/" + this.Diastolic.Value.ToString("0"); 
     } 
     else { 
      result = null; 
     } 

     return (result); 
    } 
} 

這是該行ReSharper的抱怨:ReSharper的可能出現InvalidOperationException

result = this.Systolic.Value.ToString("0") + "/" + this.Diastolic.Value.ToString("0"); 

由於我打電話給我驗證邏輯事先我可以肯定的是收縮壓和舒張壓均會對值我可以使用。 ReSharper沒有看到,還是抱怨別的?

有趣的是,它不會有一個問題,本節:

if ((this.Diastolic.Value >= 0) && (this.Systolic.Value >= 0)) { 
    valid = true; 
} 
+1

在處理值之前調用IsNotNull(),IsValid()等驗證方法時經常出現這種情況。 Resharper具有很好的註釋屬性概念(即NotNull)。對於Jetbrains來說,進一步實施諸如EnsuresNotNull(「paramName」),EnsuresNotNull(「propertyName」),EnsuresNotNull(「fieldName」)等是個好主意,它會給我們一個機會來擺脫像這樣的冒險 – 2015-11-02 16:24:46

回答

6

的東西ReSharpers檢測能力這樣有它的邊界。 ReSharper不承認對this.IsValid的調用基本上等同於this.Diastolic.HasValue && this.Systolic.HasValue,即ReSharper僅在相同的方法/屬性中查找這些檢查。

+0

由於我的一些客戶根據ReSharper問題給予我們評分,您如何建議我乾淨地解決此問題?我想保留'IsValid'屬性,以便'ToString()'中的驗證邏輯不會變得很討厭。 – Yuck 2011-05-10 15:44:17

+6

首先驗證用'IsValid'內的代碼替換'IsValid'確實會刪除該警告。如果是的話,只要讓ReSharper忽略這個特定的警告,那麼就不會再有ReSharper問題;-) *(ReSharper問題的分級代碼是無稽之談)* – 2011-05-10 15:49:27

+0

將'IsValid'邏輯移動到'ToString()'事實上擺脫警告。根據我以前的發言,我可能會以這種方式離開它。它確實很醜。 – Yuck 2011-05-10 15:52:38