这是我在类中实现的==和!=运算符。
public class MyClass
{
public int FirstField { get; set; }
public int SecondField { get; set; }
public static bool operator ==(MyClass first, MyClass second)
{
if (first == null && second == null)
return true;
else if (first == null || second == null)
return false;
else
{
if (first.FirstField == second.FirstField && first.SecondField == second.SecondField)
return true;
else
return false;
}
}
public static bool operator !=(MyClass first, MyClass second)
{
return !(first == second);
}
}
否则代码中我有以下两个用于==和!=比较的实例。
MyClass class1;
MyClass class2;
if (class1 == null || (class1 != null && class1 != class2) )
问题是当调用上面的行时,我在下一行得到一个stackoverflow异常。
if (first == null && second == null)
What am I doing wrong here?
答案 0 :(得分:3)
运营商定义中的first == null
重新调用operator =>堆栈溢出。
您要检查的是引用相等,它与重载时的“==”不同。
替换
if (first == null && second == null)
return true;
else if (first == null || second == null)
return false;
通过
if (ReferenceEquals(first,second))
return true;
if(ReferenceEquals(first,null) || ReferenceEquals(second,null))
return false;
侧节点: 您的上一个“其他”正文并不需要嵌套的“if”。它可以替换为return first.FirstField == second.FirstField && first.SecondField == second.SecondField;