我不确定以下语句是否可以写成一行(即三元形式)。
if (A == B)
FunctionA();
else
FunctionB();
FunctionA 和 FunctionB 都是void类型。
不可以。条件运算符仅对非空表达式有效。关键是评估两个表达式之一,并将其作为结果。
基本上:写if
声明。这是执行一个或另一个动作的惯用方式。
你可以写一个这样的扩展方法:
// For demonstration purposes only. Please don't use in real life.
public static void Conditional(this bool result,
Action trueAction,
Action falseAction)
{
Action action = result ? trueAction : falseAction;
action();
}
然后:
(A == B).Conditional(FunctionA, FunctionB);
...但我强烈建议您不要这样做。
如果以下语句可以写成一行
当然:
if (A == B) FunctionA(); else FunctionB();
不,使用if
声明。
但是,通过将这两个void
函数强制转换为Action
,这种 hack 是可能的:
(A == B ? (Action)FunctionA : FunctionB).Invoke();
这在表达式主体=>
方法中使用时特别方便,因为if
不能在那里使用。
当然:不要在严肃的项目中这样做!