.net 如何避免==重载中的堆栈溢出
下面是我对==和!=的实现类中的运算符.net 如何避免==重载中的堆栈溢出,.net,c#-3.0,equality,.net,C# 3.0,Equality,下面是我对==和!=的实现类中的运算符 public class MyClass { public int FirstField { get; set; } public int SecondField { get; set; } public static bool operator ==(MyClass first, MyClass second)
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?
运算符定义中的
first==null
重新调用运算符=>stack overflow
您要检查的是引用是否相等,这与重载时的“==”不同
替换你的
if (first == null && second == null)
return true;
else if (first == null || second == null)
return false;
借
侧节点:上一个“else”主体不需要嵌套的“if”。它可以替换为return first.FirstField==second.FirstField&&first.SecondField==second.SecondField代码>
if (ReferenceEquals(first,second))
return true;
if(ReferenceEquals(first,null) || ReferenceEquals(second,null))
return false;