C# GetType和typeof

C# GetType和typeof,c#,C#,我使用的是头先设计模式Ch10中的口香糖机应用程序。这很有效 问题:上面的东西有气味!有更好的办法吗 您可以使用: 当然,这也会导致继承自noquartestate的所有类型的true。根据你的例子,这应该不是问题 问题是,为什么首先要按类型进行区分?通常,这表明更好的设计已经就绪,也就是说,策略模式或多态性的另一种使用可能会有所帮助。如果可以修改GumballMachine类,则可以使用枚举而不是类型: if(gumballMachine.GetState() is NoQuarterStat

我使用的是头先设计模式Ch10中的口香糖机应用程序。这很有效

问题:上面的东西有气味!有更好的办法吗

您可以使用:

当然,这也会导致继承自
noquartestate
的所有类型的
true
。根据你的例子,这应该不是问题


问题是,为什么首先要按类型进行区分?通常,这表明更好的设计已经就绪,也就是说,策略模式或多态性的另一种使用可能会有所帮助。

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

if(gumballMachine.GetState() is NoQuarterState)
{
   //..
}
你可以试试

public enum StateEnum
{
   NoQuarterState,
   SomeOtherState
}

StateEnum GetState { get; }

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

除了使用GetType()之外,我不知道有任何其他方法可以获取实例的类型。但是,可以通过“<代码> > <代码> >代码>作为< /代码>运算符,以确定它是否是您想要的类型。我将考虑将现有代码和EnUM技术结合起来,添加STATENENM类型的属性来进行ISTATE。
public enum StateEnum
{
   NoQuarterState,
   SomeOtherState
}

StateEnum GetState { get; }

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