2013-07-18 22 views
2

以下代碼行會導致以下情況:「只能將分配調用增量減量用作語句」。只能將分配調用增量減量用作語句

iRowsEffected == 0 ? trans.Rollback() : trans.Commit(); 

我已經使用了if if else許多次,但從未收到此錯誤。

回答

8

我已經使用了的if else簡寫很多次,但從來沒有收到此錯誤。

然後我懷疑你在現在之前總是使用它。

條件運算符不僅僅是「if/else」短語......它是用於評估表達式的語法 - 表達式的結果要麼是評估第二個或第三個操作數的結果,基於評估第一個操作數的結果。

所有三個操作數必須是非空的,並且表達式的結果必須在某處使用 - 例如,就像屬性訪問一樣。

在這裏,你只是想執行一個無效的方法或另一種,所以要:

if (iRowsAffected == 0) // Fixed typo in name 
{ 
    trans.Rollback(); 
} 
else 
{ 
    trans.Commit(); 
} 

如果你真的,真的,真的想使用條件運算符,你可以使用它了方法組轉換:

Action completion = iRowsAffected == 0 ? (Action) trans.Rollback : trans.Commit; 
completion(); 

(你要投的第二個或第三個操作數的一個以提供另一種轉換,但它並不重要,你不需要投在他們倆上。)

或者在一個犯規聲明:

// Don't do this. Please. 
(iRowsAffected == 0 ? (Action) trans.Rollback : trans.Commit)(); 

請不要這樣做,但。我已經只有包括它的完整性。

+0

如果'trans'爲空會發生什麼?評估表達式時它會吹嗎?或者在'completion();'語句中? –

+0

@HighCore:評估表達式時。但我必須檢查:) –

5

conditional operator不是if子句的替代品。它用於根據布爾表達式返回兩個不同的值,並將該值分配給一個變量。但是你的兩種方法都會「返回」void,並且你在這裏不分配任何東西。

在這裏,你需要一個簡單的if - else

if(iRowsEffected == 0) 
    trans.Rollback(); 
else 
    trans.Commit(); 
相關問題