有可能用三元运算符来实现这个目的吗?

时间:2014-09-04 10:40:20

标签: c#

我想知道是否可以使用三元运算符重构以下代码:

if (HasKey("pagesPause"))
{
  Pause(GetInt("pagesPause"));
}
else
{
  Pause();
}

例如:

Pause(HasKey("pagesPause") ? GetInt("pagesPause") : void);

它不适用void想法(我使用c#)。

有什么办法吗?

3 个答案:

答案 0 :(得分:2)

我想指出Pause(Int)Pause(void)没有相同的签名(自然),所以不可能按照你尝试的方式做到这一点(一次调用两个不同的函数)签名)。
如果考虑到其他答案中陈述的三元运算符的限制,问题就会变得更糟。

答案 1 :(得分:2)

你可能有点浪费并使用条件来选择要调用的动作

(HasKey("pagesPause") ? () => Pause(GetInt("pagesPause")) : (Action)(Pause))();

这符合要求,但可能不是简化代码的意图。

或者,如果无参数版本等同于使用给定的默认参数调用,您可以找到该值并将其传递到Pause(int)

Pause (HasKey("pagesPause") ? GetInt("pagesPause") : INFINITY);

虽然如果有合适的默认值,我更有可能更改GetInt,以便检查密钥并在没有密码时使用默认值。

Pause ( GetIntOrDefault("pagesPause", INFINITY) );

答案 2 :(得分:0)

我认为这就是你要找的东西。

var pauseValue = HasKey("pagesPause") ? Pause(GetInt("pagesPause")) : Pause() ;