5

我不确定以下语句是否可以写成一行(即三元形式)。

if (A == B)
    FunctionA();
else
    FunctionB();

FunctionA 和 FunctionB 都是void类型。

4

3 回答 3

22

不可以。条件运算符仅对非空表达式有效。关键是评估两个表达式之一,并将其​​作为结果。

基本上:写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);

...但我强烈建议您不要这样做。

于 2012-10-18T16:34:53.157 回答
13

如果以下语句可以写成一行

当然:

if (A == B) FunctionA(); else FunctionB();
于 2012-10-18T16:40:24.620 回答
1

不,使用if声明。

但是,通过将这两个void函数强制转换为Action,这种 hack 是可能的:

(A == B ? (Action)FunctionA : FunctionB).Invoke();

这在表达式主体=>方法中使用时特别方便,因为if不能在那里使用。

当然:不要在严肃的项目中这样做!

于 2022-02-07T11:34:40.640 回答