繁体   English   中英

IEquatable - 覆盖等于 - 检查空值

[英]IEquatable - Overriding Equals - checking for nulls

我有一个IEquatable<T>方法:

public bool Equals(TravelOptions other)
{
    if (other == null) return false;
    return 
        this.OutTravelType.Equals(other.OutTravelType) &  //enum
        this.BackTravelType.Equals(other.BackTravelType) & //enum
        this.OutTravelPointID.Equals(other.OutTravelPointID) & //int
        this.BackTravelPointID.Equals(other.BackTravelPointID) & //int
        this.OutTerminal.Equals(other.OutTerminal) & //string
        this.BackTerminal.Equals(other.BackTerminal) & //string
        this.OutTime.Equals(other.OutTime) & //string :(
        this.BackTime.Equals(other.BackTime) & //string
        this.Checkin.Equals(other.Checkin) & //int
        this.OutFree.Equals(other.OutFree) & //bool
        this.BackFree.Equals(other.BackFree); //bool
}

但我需要做的是为那里的各个位添加一些空值检查,因为目前它会抛出一个nullreferenceexception是否有一些狡猾的方式这样做,所以它不会最终成为一个讨厌的混乱? out和back travel类型是枚举,并且总是设置为首先检查它们。 外出和后退都是bool,旅行点是整数,其余都是字符串。 只是觉得如果我开始检查空值会变得非常混乱,除非有一些简写的方法吗?

谢谢

您可以使用正常处理null值的string.Equals的静态形式:

string.Equals(this.OutTerminal, other.OutTerminal)

当然,如果您不打算通过StringComparison提供选项,这与使用==进行比较时完全相同。

对于所有这些属性,只需使用==而不是调用Equals

return OutTravelType == other.OutTravelType &&
       BackTravelType == other.BackTravelType &&
       ...;

所有这些类型都可以直接处理(int,bool,enum)或者重载==运算符( string )。 注意使用&&而不是& ,因为&&是短路:如果第一个属性比较不相等,则检查其他10个属性是没有意义的。

顺便说一句,看起来您可以将所有“Out”属性和所有“Back”属性封装在一起,只留下:

return OutwardJourney == other.OutwardJourney &&
       ReturnJourney == other.ReturnJourney &&
       Checkin == other.Checkin; // Looks like this isn't part of out/back

Journey将有旅行类型,旅行点ID,终端,时间和“免费”(无论这意味着什么)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM