我正在尝试为自定义类编写运算符重载,并且不知道如何处理空值比较。
Class Customer
{
int id;
public static bool operator ==(Customer a, Customer b)
{
//When both a and b are null don't know how to compare as can't use == in here as
//it will fall into loop
}
}
问题是当a和b都为null时结果为true但不确定如何在不使用==的情况下检查它。
答案 0 :(得分:7)
if (Object.ReferenceEquals(a,b))
return true;
ReferenceEquals()检查它们是否指向完全相同的对象(或者它们是否为空)
(作为一般规则,最好通过调用ReferenceEquals来启动Equals()方法,特别是如果方法的其余部分很复杂的话。它会使像a==a
之类的东西快速返回true,而不是必须检查每个元素。)
答案 1 :(得分:1)
我不是100%确定我理解这个问题,但你应该能够做到:
if (((object)a == null) && ((object)b == null))
{
return true;
}
没有任何问题。
答案 2 :(得分:0)
我通常使用object.Equals(a, b)
。
在你的情况下:
public static bool operator ==(Customer a, Customer b)
{
if(object.Equals(a, null) && object.Equals(b, null)
{ return true; }
}
答案 3 :(得分:0)
以下任何一项
object.ReferenceEquals(a, null)
object.Equals(a, null)
(object)a == null;
PS。我认为这在Customer.Equals中可能会更好,并且==依赖于它。
答案 4 :(得分:0)
是否可以将它们转换为system.object并使用==运算符检查它是否为空?我会检查它,但我不在开发机器上
答案 5 :(得分:0)
我实现了以下内容,它的作用类似于champ:
public static bool operator ==(Customer a, Customer b)
{
if(object.ReferenceEquals(a,b)
{ return true; }
else if(((object)a == null) || ((object)b == null))
{return false;}
else if(a.Id == b.Id)
{return true;}
return false;
}
public static bool operator !=(Customer a, Customer b)
{
return !(a==b);
}