2

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

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

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

4

2 回答 2

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

请不要这样做。我只是为了完整性而将其包括在内。

于 2013-07-18T21:22:44.890 回答
5

条件运算符不是if子句的替代品。它用于根据一个布尔表达式返回两个不同的值,并将这个值赋给一个变量。但是你的两种方法都“返回”void并且你没有在这里分配任何东西。

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

if(iRowsEffected == 0)
    trans.Rollback();
else
    trans.Commit();
于 2013-07-18T21:22:38.313 回答