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)
实际上,这是一段长的代码块,执行一次,如果在任何时候特定标志被更改,我想放弃.
收紧这种代码的最佳方法是什么?
否 - 将检查条件一次,然后执行整个块.另一个选择可能是在块中注入救助:
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没有参数),但它更清洁.
| 归档时间: |
|
| 查看次数: |
1324 次 |
| 最近记录: |