這是我的理解,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。
這樣,和以前一樣,運行時檢查第一個條件,現在得到錯誤結果,就足以決定沒有必要檢查第二個條件..
if (index != -1 && pieces[index].Type != PieceType.Rook)
{
allowed = false;
}
這是因爲您使用OR運算符。第一個條件是錯誤的,所以第二個條件開始評估
您應該擁有index != 1 && ...
。
另外,是index
< -1
或>= pieces.Length
?
更換||
與&&
if (index != -1 && pieces[index].Type != PieceType.Rook)
否則第二codition進行評估,如果第一個是假的,你不想要的東西。你希望兩個條件都是true
,尤其是第一個。
||
將停止評估它的時候發現事情是真的。由於index != -1
是錯誤的,它會評估表達式的兩邊。如果你&&
一旦發現錯誤就會停止。我會推薦在lazy evulation上閱讀。
你想&&,not || (如果(第一個條件AND第二個條件) – 2013-03-23 15:17:14