use*_*618 0 c# optimization simplify
我有一个基于枚举的方法,并且在开始时我们有这种情况:
public void MyMetohd(Somestatus status)
{
if(status == Somestatus.Enum1)
{
DoA();
DoB();
DoC();
DoD();
DoE();
}
if(status == Somestatus.Enum2)
{
DoA();
DoB();
DoC();
DoD();
}
if(status == Somestatus.Enum3)
{
DoA();
DoB();
DoC();
}
if(status == Somestatus.Enum4)
{
DoA();
DoB();
}
if(status == Somestatus.Enum5)
{
DoA();
}
}
Run Code Online (Sandbox Code Playgroud)
你会如何优化这种代码(它不是我的代码)?
如果设置了每个成员的值,则可以使用比较enum.
enum Somestatus : int
{
Enum1 = 1,
Enum2 = 2,
...
}
Run Code Online (Sandbox Code Playgroud)
然后只需使用比较来完成代码.因为你总是这样做DoA(),所以从那开始.
if(status <= Somestatus.Enum5)
DoA();
if(status <= Somestatus.Enum4)
DoB();
if(status <= Somestatus.Enum4)
DoC();
...
Run Code Online (Sandbox Code Playgroud)
继续这样.这样,当值为时,将调用所有函数Enum1.
通过优化我会假设你的意思是"制造DRYer".
你将不得不在易于阅读的代码(你拥有的代码,虽然略有重复性)和尽可能少重复的代码之间取得平衡.
只是输入这个让我觉得很脏,但如果你想要的是DRY和更少的LOC,我认为它会做你想要的.
switch (status)
{
case Somestatus.Enum1:
DoE();
goto SomeStatus.Enum2;
case Somestatus.Enum2:
DoD();
goto SomeStatus.Enum3;
case Somestatus.Enum3:
DoC();
goto SomeStatus.Enum4;
case Somestatus.Enum4:
DoB();
goto SomeStatus.Enum5;
case Somestatus.Enum5:
DoA();
break;
default:
throw new InvalidArgumentException("Unknown Status");
}
Run Code Online (Sandbox Code Playgroud)