只有赋值调用增量递减才能用作语句

Zzz*_*Zzz 2 c# winforms

以下代码行导致以下"只能将赋值调用增量减量用作语句".

iRowsEffected == 0 ? trans.Rollback() : trans.Commit();
Run Code Online (Sandbox Code Playgroud)

我多次使用if else速记,但从未收到此错误.

Jon*_*eet 8

我多次使用if else速记,但从未收到此错误.

然后我怀疑你在此之前总是正确使用它.

条件运算符不仅仅是"if/else"的简写...它是用于计算表达式的语法- 表达式的结果是根据第一个或第三个操作数的计算结果来评估第一个或第三个操作数的结果操作数.

所有三个操作数必须是非void的,并且表达式的结果必须在某处使用 - 例如,就像属性访问一样.

在这里,您只是尝试执行一个或多个void方法,因此您需要:

if (iRowsAffected == 0) // Fixed typo in name
{
    trans.Rollback();
}
else
{
    trans.Commit();
}
Run Code Online (Sandbox Code Playgroud)

如果你真的,真的,真的想要使用条件运算符,你可以将它用于方法组转换:

Action completion = iRowsAffected == 0 ? (Action) trans.Rollback : trans.Commit;
completion();
Run Code Online (Sandbox Code Playgroud)

(你要投一个第二或第三个操作数,以提供另一种转换,但它并不重要,你不需要投他们两个.)

或者在一个错误的声明中:

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

请不要这样做.我只是为了完整性而把它包括在内.


Tim*_*ter 5

有条件的经营者是不是更换一个的if条款.它用于根据布尔表达式返回两个不同的值,并将此值赋给变量.但是你的两个方法都"返回" void而你没有在这里指定任何东西.

在这里你需要一个简单的if- else:

if(iRowsEffected == 0)
    trans.Rollback();
else
    trans.Commit();
Run Code Online (Sandbox Code Playgroud)