首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GetType和typeof

GetType和typeof
EN

Stack Overflow用户
提问于 2011-11-29 12:15:14
回答 3查看 409关注 0票数 2
代码语言:javascript
运行
复制
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有股臭味!有没有更好的方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-29 12:16:56

您可以使用is operator

代码语言:javascript
运行
复制
if(gumballMachine.GetState() is NoQuarterState)
{
   //..
}

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

问题是,为什么你必须首先按类型来区分?通常情况下,这是一个更好的设计的标志,也就是说,策略模式或多态性的另一种使用可能会有所帮助。

票数 4
EN

Stack Overflow用户

发布于 2011-11-29 12:20:22

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

代码语言:javascript
运行
复制
public enum StateEnum
{
   NoQuarterState,
   SomeOtherState
}

StateEnum GetState { get; }

if(gumballMachine.GetState.Equals(StateEnum.NoQuarterState)) { ... }
票数 1
EN

Stack Overflow用户

发布于 2011-11-29 12:23:34

你可以试试

代码语言:javascript
运行
复制
  object typeThing = gumballMachine.GetState();
  //1st way
  if (typeThing is NoQuarterState) {...}
  //Or 2nd way
  if ((typeThing as NoQuarterState)!=null) {...}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8305765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档