2011-05-10 38 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

相关问题