我通常使用状态模式来避免条件语句。
而不是使用:
switch (state)
{
case ParserState.BeforeMethod:
//do some processing
break;
case ParserState.InMethod:
//do some processing
break;
}
我可以直接写:
currentState = currentState.process(context);
一个示例类可以看起来像这样
public class SomeClass : ParserState
{
public ParserState process(IParserContext context)
{
//do some proceccing
if (m_completed)
return new SomeOtherState();
return this;
}
}