我的目标是创建一个具有一定数量不同状态的“GameState”类型。 我希望它的行为几乎完全像枚举集,但我希望有一个以上的整数作为数据。
举个例子,这就是我想要做的事情:
switch(this.gameState)
{
case(Wait):
if(elapsedTime > gameState.TimeOutTime)
//do stuff
break;
case(Play):
if(elapsedTime > gameState.TimeOutTime)
//do other stuff
break;
}
因此,我不想将GameState作为整数枚举,而是希望它包含TimeOutTime等变量以及有关该GameState的其他有用信息。
有没有办法为枚举添加深度,还是我只是以错误的角度攻击这个问题?
答案 0 :(得分:5)
已经有很好的答案(@ Selman22,@ Max)。
但我猜他们错过了一个重要的信息:You should not switch on type。改为使用多态。
因此,根据您的示例,您应该使用以下内容:
public abstract class GameState
{
public int TimeOutTime { get; set; }
public void CheckDoStuff()
{
if (elapsedTime > gameState.TimeOutTime) DoStuff();
}
protected abstract void DoStuff();
}
public WaitState : GameState
{
protected override DoStuff()
{
// Do stuff (wait)
}
}
public PlayState : GameState
{
protected override DoStuff()
{
// Do other stuff (play)
}
}
注意:我没有添加任何enum
,因为我不认为在这种情况下确实需要一个。{/ p>
答案 1 :(得分:2)
你想要的是class
。您无法使用enums
执行此操作,而是添加一个类并使枚举成为您的类的属性。
class GameState
{
public GameStateEnum State { get; set; }
public int TimeOutTime { get; set; }
// other properties...
}
答案 2 :(得分:1)
您可以轻松地为此创建一个类:
public class GameState
{
public StateEnum State {get; set;}
public DateTime TimeOutTime {get; set;}
}
创建GameStates列表很简单:
List<GameState> gameStateList = new List<GameState>();
答案 3 :(得分:1)
你不能用.NET enums
(你可以使用Java)
假设您elapsedTime
是DateTime,例如:
使用System;
public class GameState
{
private readonly TimeOutTime _timeOutTime;
public GameState(TimeOutTime timeOutTime)
{
_timeOutTime = timeOutTime;
}
public TimeOutTime TimeOutTime { get { return _timeOutTime; } }
}
public class TimeOutTime
{
private readonly DateTime _dateTime;
public TimeOutTime(DateTime dateTime)
{
_dateTime = dateTime;
}
public static implicit operator DateTime(TimeOutTime timeOutTime)
{
return new TimeOutTime(timeOutTime);
}
public static implicit operator TimeOutTime(DateTime timeOutTime)
{
return new TimeOutTime(timeOutTime);
}
}