据我了解,C#条件运算符执行短路。但是,我的程序在运行此代码时抛出异常。索引等于-1,因此第二个条件永远不应该执行,但我得到索引超出范围的异常。
if (index != -1 || pieces[index].Type != PieceType.Rook)
{
allowed = false;
}
答案 0 :(得分:2)
您使用过||因此,当第一个条件失败时(索引IS -1),运行时需要在排除执行代码之前检查第二个条件,这将触发异常,
相反,你使用&& (AND)如果只想在两个条件成立时输入if 这样,就像以前一样,运行时检查第一个条件,现在得到错误的结果足以判断不需要检查第二个条件。
if (index != -1 && pieces[index].Type != PieceType.Rook)
{
allowed = false;
}
答案 1 :(得分:1)
将||
替换为&&
if (index != -1 && pieces[index].Type != PieceType.Rook)
否则,如果第一个条件为假,则评估第二个条件。您希望两个条件都是true
,尤其是第一个条件。
答案 2 :(得分:0)
那是因为你使用OR运算符。第一个条件是假的,所以第二个开始评估。
答案 3 :(得分:0)
你应该有index != 1 && ...
。
另外,是index
< -1
还是>= pieces.Length
?
答案 4 :(得分:0)
||
会在发现某些内容为真时停止评估。由于index != -1
为false,它将评估表达式的两侧。如果你&&
,一旦发现错误就会停止。我建议你阅读lazy evulation。