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

本文关键字:语句 赋值 值调用 | 更新日期: 2023-09-27 18:23:54

以下代码行导致以下"只有赋值调用增量递减才能用作语句。"

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

我已经用了很多次if-else简写,但从未收到过这个错误。

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

我已经用了很多次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)();

请不要这样做。为了完整起见,我只包含了。

条件运算符不是if子句的替换。它用于根据布尔表达式返回两个不同的值,并将该值分配给一个变量。但是您的两个方法都"返回"void,并且您在这里没有分配任何内容。

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

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