您的位置:首页 > 产品设计 > UI/UE

C#重载操作符“==”执行时引发“Process is terminated due to StackOverflowException.”的解决办法

2011-07-16 10:56 691 查看
昨天编程重载“==”时,例程如下:
public class DeviceInfo
{
public override bool Equals(object obj)
{
return this.Device == ((DeviceInfo)obj).Device;
}

public static bool operator ==(DeviceInfo obj1, DeviceInfo obj2)
{
if (obj1 == null) return obj2 == null;

return obj1.Device == obj2.Device;
}

public static bool operator !=(DeviceInfo obj1, DeviceInfo obj2)
{
return !(obj1==obj2);
}

public string Device;//设备名称,关键字
public string IP;//IP地址
//...
}
编译无任何问题,但执行时却抛出“Process is terminated due to StackOverflowException.”,经分析,是由于对象为空时,“==”就形成了无结束的递归调用,直至最终堆栈溢出。要解决此问题,必须打破无休止的递归调用,通过调用基类的操作符来解决该问题。
public class DeviceInfo
{
public override bool Equals(object obj)
{
if(! (obj is DeviceInfo)) return false;

DeviceInfo di2 = (DeviceInfo)obj;
return (this.Device.CompareTo(di2.Device)==0);
}

public static bool operator ==(DeviceInfo obj1, DeviceInfo obj2)
{
if ((obj1  as object) == null) return (obj2 as object) == null;//引用基类object的比较操作符

return obj1.Equals(obj2);
}

public static bool operator !=(DeviceInfo obj1, DeviceInfo obj2)
{
return !(obj1==obj2);
}

public string Device;//设备名称,关键字
public string IP;//IP地址
//...
}

编译环境:VS2010(C#)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐