【问题标题】:? operator shows an "unreachable code detected" warning?操作员显示“检测到无法访问的代码”警告
【发布时间】:2016-09-03 06:57:37
【问题描述】:

我正在实现一个 equals 方法,其中一个相等条件是两个日期匹配。我当前的代码是:

public override bool Equals(object obj)
{
    if (obj == null || obj.GetType() != typeof(Appointment))
        return false;
    Appointment other = obj as Appointment;
    bool equal = true;
    equal = (this.date == null ? (other.date == null) : (this.date.Equals(other.date)));
    //more stuff here
    return equal
}

当我尝试构建它时,我收到一条警告,指向 other.date==null 语句,说检测到无法访问的代码

但是当我用这个替换它时:

if (this.date == null)
    equal = other.date == null;
else
    equal = (this.date.Equals(other.date));

我没有收到这样的警告

我错过了什么?

【问题讨论】:

  • date 是什么类型?向我们展示您的对象声明。
  • 如果这是实例变量,也许你在这段代码之前的某个地方改变了它,不是吗?
  • date 是一个不可为空的结构,比如DateTime?如果是这样,它将永远为空,这就是编译器告诉你的。
  • 是的,问题似乎是我没有将日期声明为日期时间?而是忘记添加? .当我改变它不再引发任何警告时,我发现奇怪的是,即使 date 最初被声明为 DateTime ,第二个代码也没有引发警告

标签: c# operators


【解决方案1】:

当数据类型是“对象”时,我没有收到这样的警告,但是当我将数据类型更改为“日期时间”时,我就收到了。所以它与数据类型有关。日期时间不能为空。无论如何,您应该检查“其他”是否为空:

Appointment other = obj as Appointment;
bool equal = false;  // init to false is better
if (other != null)
{
    equal = (this.date == null ? (other.date == null) : (this.date.Equals(other.date)));
}
return equal;

【讨论】:

  • other 不能为空(我认为),因为 obj.GetType() != typeof(Appointment) 很早。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 2011-05-09
  • 1970-01-01
  • 2015-05-22
  • 2017-11-08
  • 2010-12-01
相关资源
最近更新 更多