ReSharper可能的InvalidOperationException

Yuc*_*uck 8 c# resharper

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是ReSharper抱怨的那条线:

result = this.Systolic.Value.ToString("0") + "/" + this.Diastolic.Value.ToString("0");
Run Code Online (Sandbox Code Playgroud)

由于我事先调用了我的验证逻辑,我可以确定收缩压和舒张压都有我可以使用的值.ReSharper没有看到这个,还是在抱怨其他什么?

有趣的是,这部分没有问题:

if ((this.Diastolic.Value >= 0) && (this.Systolic.Value >= 0)) {
    valid = true;
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*rth 8

像这样的东西的ReSharpers检测能力有它的界限.ReSharper不承认对该问题的调用this.IsValid基本上等同于this.Diastolic.HasValue && this.Systolic.HasValue,即ReSharper仅在相同的方法/属性中查找这些检查.

  • 首先验证用`IsValid`中的代码替换`IsValid`确实删除了该警告.如果是这样,只需让ReSharper忽略此特定警告,因此不再有ReSharper问题;-)*(对ReSharper问题数量的评分代码是无稽之谈)* (8认同)