短路不起作用

时间:2013-03-23 15:16:11

标签: c# short-circuiting

据我了解,C#条件运算符执行短路。但是,我的程序在运行此代码时抛出异常。索引等于-1,因此第二个条件永远不应该执行,但我得到索引超出范围的异常。

if (index != -1 || pieces[index].Type != PieceType.Rook)
{
    allowed = false;
}

5 个答案:

答案 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