简化空检查和相等

  • 本文关键字:检查和 c# null
  • 更新时间 :
  • 英文 :


我有两个类,PersonSpouse,以及这个检查配偶之间平等的方法:

private bool SpousesSame(Person p1, Person p2)
{
    bool tempFlag = false;
    if (p1 != null && p2 != null && p1.Spouse != null && p2.Spouse != null && p1.Spouse == p2.Spouse)
    {
        tempFlag = true;
    }
    return tempFlag;
}

如您所见,有很多空检查(Person也可以null)。这可以简化吗?

编辑:我试图在两个人也为空时返回false

private bool SpousesSame(Person p1, Person p2)
{
    return p1?.Spouse != null && p1.Spouse == p2?.Spouse;
}

如果p1p1.Spouse为空,则p1?.Spouse将为空,在这种情况下,将返回false

否则,我们知道p1.Spouse不为空,因此可以将其与 p2?.Spouse .

使用 Elvis 运算符?.如下所示:

p1?.Spouse != null && p2?.Spouse != null

p1?.Spouse如果 p1为 null,则计算结果为 null,否则计算结果为 p1.Spouse 。你可以把它链接在一起,所以如果Spouse上有另一个属性,你可以执行以下操作:

p1?.Spouse?.Name

这将返回配偶的姓名,但前提是p1.Spousep1都是非空的,以避免空引用异常。

此外,我会在相等性检查的单独 if 块中进行空检查,因为空检查是验证,而相等检查是您的实际逻辑。除非你的方法还有更多,否则你不需要设置tempFlag,你可以直接返回一个bool,所以你的方法可以简化为:

private bool SpousesSame(Person p1, Person p2)
{
    //return false if either person or their spouse is null
    if (p1?.Spouse == null || p2?.Spouse == null)
    {
        return false;
    }
    return (p1.Spouse == p2.Spouse);
}

您可以将代码替换为单个赋值。这应该等效于您的代码,还请注意,您不需要检查属性,因为您已经检查了 p1 和 p2 参数并使用了 && 运算符:

private bool SpousesSame(Person p1, Person p2)
{
     bool tempFlag = p1 != null && p2 != null && p1.Spouse == p2.Spouse;    
     return tempFlag;
}

相关内容

  • 没有找到相关文章

最新更新