我有一个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,旅行点是整数,其余都是字符串。 只是觉得如果我开始检查空值会变得非常混乱,除非有一些简写的方法吗?
感谢
答案 0 :(得分:2)
您可以使用string.Equals
的静态格式来优雅地处理null
值:
string.Equals(this.OutTerminal, other.OutTerminal)
当然,如果您不打算通过StringComparison
提供选项,这与将==
进行比较的情况完全相同。
答案 1 :(得分:2)
对于所有这些属性,只需使用==
而不是调用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,终点,时间和“免费”(无论这意味着什么)。