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;
}
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 –