0

我的理解是 C# 条件运算符执行短路。但是,我的程序在运行此代码时引发异常。索引等于-1,所以第二个条件永远不应该执行,但是我得到一个索引越界异常。

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

5 回答 5

2

你用过|| 因此,当第一个条件失败(索引 IS -1)时,运行时需要在排除执行代码之前检查第二个条件,这将触发异常,

相反,如果您只想在两个条件都为真时输入 if,则使用 && (AND)。
这样,和以前一样,运行时检查第一个条件,现在得到错误的结果就足以决定不需要检查第二个条件。

if (index != -1 && pieces[index].Type != PieceType.Rook)
{
    allowed = false;
}
于 2013-03-23T15:18:44.447 回答
1

替换||&&

if (index != -1 && pieces[index].Type != PieceType.Rook)

否则,如果第一个是您不想要的错误,则评估第二个代码。您希望两个条件都存在true,尤其是第一个条件。

于 2013-03-23T15:17:49.160 回答
0

||当它发现某事为真时将停止评估。由于index != -1为假,它将评估表达式的两侧。如果你&&一旦发现错误就会停止。我建议阅读惰性评估

于 2013-03-23T15:28:50.633 回答
0

那是因为您使用 OR 运算符。第一个条件是假的,所以第二个开始评估。

于 2013-03-23T15:17:24.400 回答
0

你应该有index != 1 && ...

另外,是index < -1还是>= pieces.Length

于 2013-03-23T15:17:46.553 回答