我知道至少一个值不为零,总和仍始终为0,
为什么?
get
{
Debug.WriteLine("ILockSumN");
Debug.WriteLine(iLocks[2, 1] == (Int32?)null ? 0 : (Int32)iLocks[2, 1]);
Debug.WriteLine(iLocks[3, 1] == (Int32?)null ? 0 : (Int32)iLocks[3, 1]);
Debug.WriteLine(iLocks[6, 1] == (Int32?)null ? 0 : (Int32)iLocks[6, 1]);
Int32 sum =
iLocks[1, 1] == (Int32?)null ? 0 : (Int32)iLocks[1, 1] +
iLocks[2, 1] == (Int32?)null ? 0 : (Int32)iLocks[2, 1] +
iLocks[3, 1] == (Int32?)null ? 0 : (Int32)iLocks[3, 1] +
iLocks[4, 1] == (Int32?)null ? 0 : (Int32)iLocks[4, 1] +
iLocks[5, 1] == (Int32?)null ? 0 : (Int32)iLocks[5, 1] +
iLocks[6, 1] == (Int32?)null ? 0 : (Int32)iLocks[6, 1];
Debug.WriteLine(sum);
return sum;
}
似乎是一个优先级问题-基本上,如果iLocks[1, 1]
是,null
那么它将花费,0
否则,它将使用具有所有附加项的另一个分支。
尝试添加括号:
Int32 sum =
(iLocks[1, 1] == (Int32?)null ? 0 : (Int32)iLocks[1, 1]) +
(iLocks[2, 1] == (Int32?)null ? 0 : (Int32)iLocks[2, 1]) +
(iLocks[3, 1] == (Int32?)null ? 0 : (Int32)iLocks[3, 1]) +
(iLocks[4, 1] == (Int32?)null ? 0 : (Int32)iLocks[4, 1]) +
(iLocks[5, 1] == (Int32?)null ? 0 : (Int32)iLocks[5, 1]) +
(iLocks[6, 1] == (Int32?)null ? 0 : (Int32)iLocks[6, 1]);
条件运算符是右关联的,这意味着运算从右到左分组。例如,形式为?的表达式。b:c?d:e被评估为a?b:(c→d:e)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句