GetType和typeof

时间:2011-11-29 04:15:14

标签: c#

Type typeThing = gumballMachine.GetState().GetType();
if (typeThing == typeof(NoQuarterState)) { ... }


IState state;
public IState GetState() {
    return state;
}


public class NoQuarterState : IState { ... }

我正在使用Head First Design Patterns Ch10中的gumballMachine应用程序。 full code here这有效。

问题:输入上面的气味!有没有更好的办法?

3 个答案:

答案 0 :(得分:4)

您可以使用is operator

if(gumballMachine.GetState() is NoQuarterState)
{
   //..
}

当然,对于从true继承的所有类型,这也会导致NoQuarterState。根据您的示例,这应该不是问题。

问题是为什么你必须首先区分类型?通常这表明更好的设计是有序的,也许战略模式或多态的另一种用途可能有所帮助。

答案 1 :(得分:1)

如果你可以修改GumballMachine类,你可以使用枚举而不是类型:

public enum StateEnum
{
   NoQuarterState,
   SomeOtherState
}

StateEnum GetState { get; }

if(gumballMachine.GetState.Equals(StateEnum.NoQuarterState)) { ... }

答案 2 :(得分:1)

你可以尝试

  object typeThing = gumballMachine.GetState();
  //1st way
  if (typeThing is NoQuarterState) {...}
  //Or 2nd way
  if ((typeThing as NoQuarterState)!=null) {...}