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

时间:2013-07-18 21:20:20

标签: c# winforms

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

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

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

2 个答案:

答案 0 :(得分:8)

  

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

然后我怀疑你在此之前总是使用它。

条件运算符不仅仅是“if / else”的简短...它是用于评估表达式的语法 - 表达式的结果是评估第二个或第三个的结果操作数,基于评估第一个操作数的结果。

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

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

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)();

请不要这样做。为了完整性,我包含它。

答案 1 :(得分:5)

conditional operator不是if子句的替代。它用于根据布尔表达式返回两个不同的值,并将此值赋给变量。但是你的两个方法都“返回”void并且你没有在这里指定任何东西。

您需要一个简单的if - else

if(iRowsEffected == 0)
    trans.Rollback();
else
    trans.Commit();