2011-05-10 3 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); 
    } 
} 

Ceci est la ligne ReSharper se plaint:ReSharper InvalidOperationException possible

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

Depuis que je vous appelle à l'avance ma logique de validation je peux être sûr que les deux Systolique et diastoliques auront des valeurs que je peux utiliser. ReSharper ne voit-il pas cela, ou se plaint-il d'autre chose?

Fait intéressant, il n'a pas de problème avec cette section:

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

Il existe des situations fréquentes lorsque l'on appelle des méthodes de validation comme IsNotNull(), IsValid() avant de manipuler une valeur. Resharper a un excellent concept d'attributs d'annotation (c'est-à-dire NotNull). Ce serait une bonne idée pour Jetbrains d'aller plus loin et d'implémenter des méthodes comme EnsuresNotNull ("paramName"), EnsuresNotNull ("propertyName"), EnsuresNotNull ("fieldName"), cela nous donnera l'opportunité de nous débarrasser des usures comme ceci –

Répondre

6

capacités de détection de ReSharpers de trucs comme ça a ses limites. ReSharper ne reconnaît pas que l'appel à this.IsValid est fondamentalement équivalent à this.Diastolic.HasValue && this.Systolic.HasValue en ce qui concerne ce problème, c'est-à-dire que ReSharper recherche ces vérifications uniquement dans la même méthode/propriété.

+0

Étant donné que certains de mes clients nous évaluent le nombre de problèmes de ReSharper, comment suggéreriez-vous que je résolve ce problème? Je voudrais garder la propriété 'IsValid' afin que la logique de validation dans' ToString() 'ne soit pas si méchante. – Yuck

+6

Vérifiez d'abord que le remplacement de 'IsValid' par le code dans' IsValid' supprime vraiment cet avertissement. Si tel est le cas, faites en sorte que ReSharper ignore cet avertissement particulier, donc il n'y a plus de problème avec ReSharper ;-) * (Le code de notation sur le nombre de problèmes ReSharper est absurde) * –

+0

Déplacer la logique 'IsValid' dans' ToString() ' se débarrasser de l'avertissement. Sur la base de ma déclaration précédente, je vais probablement le laisser de cette façon. C'est sûr que c'est moche. – Yuck

Questions connexes