以下代码行导致以下“只有赋值调用增量减量可以用作语句”。
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();