在没有多个IF语句的每行代码之前检查一个条件?

iaj*_*ajs 2 c# redundancy if-statement

是否有可能在没有if (condition)每行之前检查语句块的每一行是否为真?

例如:

if (condition)
{
    DoSomething();
    DoSomethingElse();
    DoAnotherThing();
}
Run Code Online (Sandbox Code Playgroud)

在某些时候,另一个后台进程可能在执行condition之前设置为false DoSomethingElse().基本上我正在寻找一种有效且简单的说法:

if (condition) DoSomething();
if (condition) DoSomethingElse();
if (condition) DoAnotherThing();
Run Code Online (Sandbox Code Playgroud)

实际上,这是一段长的代码块,执行一次,如果在任何时候特定标志被更改,我想放弃.

收紧这种代码的最佳方法是什么?

D S*_*ley 6

否 - 将检查条件一次,然后执行整个块.另一个选择可能是在块中注入救助:

if (condition)
{
    DoSomething();
    if(!condition) return;
    DoSomethingElse();
    if(!condition) return;
    DoAnotherThing();
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是如果函数可以参数化,以便您可以将它们放在循环中:

foreach (varmyParam in parameters)
{
    if(condition)
       DoSomething(myParam);
}
Run Code Online (Sandbox Code Playgroud)

编辑

在考虑了一些之后,这可能是您的最佳选择:

List<Action> funcs = new List<Action> {DoSomething, DoSomethingElse, DoAnotherThing};
foreach( Action a in funcs)
{
   if(condition) a();
}
Run Code Online (Sandbox Code Playgroud)

这要求所有方法都具有相同的签名(在您的情况下返回void没有参数),但它更清洁.