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