Type typeThing = gumballMachine.GetState().GetType();
if (typeThing == typeof(NoQuarterState)) { ... }
IState state;
public IState GetState() {
return state;
}
public class NoQuarterState : IState { ... }
我使用的是Head First设计模式的Ch10的gumballMachine应用程序。full code here这是可行的。
问题:上面的typeThing有股臭味!有没有更好的方法?
发布于 2011-11-29 12:16:56
您可以使用is
operator
if(gumballMachine.GetState() is NoQuarterState)
{
//..
}
当然,这也会导致从NoQuarterState
继承的所有类型的true
。根据您的示例,这应该不是问题。
问题是,为什么你必须首先按类型来区分?通常情况下,这是一个更好的设计的标志,也就是说,策略模式或多态性的另一种使用可能会有所帮助。
发布于 2011-11-29 12:20:22
如果您可以修改GumballMachine类,则可以使用枚举而不是类型:
public enum StateEnum
{
NoQuarterState,
SomeOtherState
}
StateEnum GetState { get; }
if(gumballMachine.GetState.Equals(StateEnum.NoQuarterState)) { ... }
发布于 2011-11-29 12:23:34
你可以试试
object typeThing = gumballMachine.GetState();
//1st way
if (typeThing is NoQuarterState) {...}
//Or 2nd way
if ((typeThing as NoQuarterState)!=null) {...}
https://stackoverflow.com/questions/8305765
复制相似问题