我已经调试了一段时间的问题并意识到它来自于==
在我应该使用object.Equals()
为了防止此类问题,我希望==
运算符调用我已覆盖的Object.Equals()
。
这可能吗?以下代码遇到堆栈溢出异常...
public static bool operator ==(Portfolio a, Portfolio b)
{
return a != null && a.Equals(b);
}
public static bool operator !=(Portfolio a, Portfolio b)
{
return a != null && !a.Equals(b);
}
谢谢!
答案 0 :(得分:6)
您从!=
运算符递归调用!=
运算符,因此堆栈溢出。请改用ReferenceEquals
:
public static bool operator !=(Portfolio a, Portfolio b)
{
return !object.ReferenceEquals(a, null) && !a.Equals(b);
}
也就是说,此代码存在缺陷,因为如果false
为空并且a
不是b
,它将返回public static bool operator !=(Portfolio a, Portfolio b)
{
if (object.ReferenceEquals(a, null))
{
return !object.ReferenceEquals(b, null);
}
return !a.Equals(b);
}
。您应该检查两个对象是否为null:
$arrs['Name1'] = array(
3,4,3
);
$arrs['Name2'] = array(
11,2
);
$count_status = array();
foreach($arrs as $index=>$arr){
$sum = 0;
foreach($arr as $key=>$arrss){
isset($arrs[$index]) ? $count_status[$index] = $sum+=$arrss : $sum = 0;
}
$allVal[$index] = implode('+',$arr);
}
foreach($count_status as $stKey=>$eachCount){
echo $stKey.' - '.$eachCount.' ('.$allVal[$stKey].') <br>';
}