Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ReSharper可能无效操作异常_C#_Resharper - Fatal编程技术网

C# ReSharper可能无效操作异常

C# ReSharper可能无效操作异常,c#,resharper,C#,Resharper,这是ReSharper抱怨的一句话: public class BloodPressure { public Int16? Diastolic { get; set; } private Boolean IsValid { get { var valid = false; if (this.Diastolic.HasValue && this.Systolic.HasValue) {

这是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);
    }
}
因为我事先调用了验证逻辑,所以我可以确定收缩压和舒张压都有我可以使用的值。是ReSharper没有看到这一点,还是它在抱怨其他事情

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

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

ReSharpers这种东西的检测能力有其局限性。ReSharper没有意识到调用
this.IsValid
基本上等同于
this.displastic.HasValue&&this.Systolic.HasValue
关于这个问题,也就是说,ReSharper只在相同的方法/属性中查找这些检查。

因为我的一些客户根据ReSharper问题的数量给我们打分,你建议我如何彻底解决这个问题?我想保留
IsValid
属性,这样
ToString()
中的验证逻辑就不会变得那么糟糕了。首先验证用
IsValid
中的代码替换
IsValid
是否真的会删除该警告。如果是这样,只需使ReSharper忽略此特定警告,就不再存在ReSharper问题;-)(根据重拾器问题的数量对代码进行分级是毫无意义的)将
IsValid
逻辑移动到
ToString()
实际上可以消除警告。根据我之前的陈述,我可能就不这样说了。这确实很难看。在操作值之前,经常会调用验证方法,如IsNotNull()、IsValid()。Resharper对注释属性(即NotNull)有一个很好的概念。Jetbrains进一步实现EnsuresNotNull(“paramName”)、EnsuresNotNull(“propertyName”)、EnsuresNotNull(“fieldName”)之类的工具将是一个好主意,它将为我们提供一个摆脱此类问题的机会
if ((this.Diastolic.Value >= 0) && (this.Systolic.Value >= 0)) {
    valid = true;
}