我想知道是否可以使用三元运算符重构以下代码:
if (HasKey("pagesPause"))
{
Pause(GetInt("pagesPause"));
}
else
{
Pause();
}
例如:
Pause(HasKey("pagesPause") ? GetInt("pagesPause") : void);
它不适用void
想法(我使用c#)。
有什么办法吗?
答案 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() ;