运算符重载-如何在c#中实现==并检查null
本文关键字:实现 检查 null 重载 运算符 | 更新日期: 2023-09-27 17:54:33
可能的重复:
比较引用类型的两个实例的"最佳实践"是什么
如何在没有无限递归的情况下检查"=="运算符重载中的null?
我有一个名为"Criterion"的类,我想实现==运算符,但我正在努力解决以下问题:
当我实现==运算符时,我会检查我的一个或两个实例是否为null,但当我这样做时,它会导致对==的递归调用,然后我会得到"StackOverflow"(he he(异常。
从技术上讲,我可以实现Equals运算符,而不覆盖==,但如果我实现==运算符,代码将更可读。
这是我的代码:
public static bool operator == (Criterion c1, Criterion c2)
{
if (null == c1)
{
if (null == c2)
return true;
return false;
}
if (null == c2)
return false;
if ((c1.mId == c2.mId) && (c1.mName == c2.mName))
return true;
return false;
}
尝试ReferenceEquals:
public static bool operator ==(Criterion c1, Criterion c2) {
var nullC1 = ReferenceEquals(null, c1);
var nullC2 = ReferenceEquals(null, c2);
if (nullC1 && nullC2)
return true;
if (!nullC1 && !nullC2)
if (c1.mId == c2.mId && c1.mName == c2.mName)
return true;
return false;
}
我会这样做:
bool isC1Null = Object.Equals(c1, null)
bool isC2Null = Object.Equals(c2, null)
if (isC1Null ^ isC2Null)
{
return false
}
if (isC1Null && isC2Null)
{
return true
}
//your code