2014-03-29 140 views
4

由於我的遊戲有一些模式(應該在初始化時提供),所以我想爲它創建一個枚舉。後來我想獲得這個枚舉的價值。下面是我的代碼 -在C中使用枚舉#

enum GameMode : short 
{ 
    Stop = 0, 
    StartSinglePlayer = 4, 
    StartMultiPlayer = 10, 
    Debug = 12 
} 
class Game 
{ 
    static short GetValue(GameMode mode) 
    { 
     short index = -1; 
     if (mode == GameMode.Stop) 
      index = 0; 
     else if (mode == GameMode.StartSinglePlayer) 
      index = 4; 
     else if (mode == GameMode.StartMultiPlayer) 
      index = 10; 
     else if (mode == GameMode.Debug) 
      index = 12; 
     return index; 
    } 
    static void Main(string[] args) 
    { 
     var value = GetValue(GameMode.StartMultiPlayer); 
    } 
} 

我很想知道更好的方法來做同樣的事情,如果存在。

+1

您想將此枚舉轉換爲short值的任何特定原因?枚舉更清晰。 – Steve

+0

@Steve:由'GetValue()'返回的索引值將稍後在數學表達式中使用。由於模式名稱使用​​簡單,所以我創建了枚舉。 –

回答

11

當然,有一個更簡單的方法。只是您枚舉它的基本數字數據類型:

value = (short)mode; 
+0

是的......這就是我期待的......非常感謝。 –

1

如果有這樣的多個交換機或是否有針對每個模式不同的行爲,那麼我會建議使用polymorphism instead of enum with switch。如果示例中的開關僅用於使用GameMode的位置,Heinzi的解決方案更簡單。但是,如果你遇到了你想用你所展示的GameMode做不同的事情的情況,我至少應該記住未來。

+0

完全同意你的觀點。但是目前Heinzi的解決方案對我來說是完美的。感謝提前信息。 –