2266 發表於 2022-10-11 15:48:00

C# enum列舉類型使用教學<轉>

本帖最後由 2266 於 2022-10-11 15:51 編輯

https://a032332852.pixnet.net/blog/post/163058744-%284%29-c%23-enum%E5%88%97%E8%88%89%E9%A1%9E%E5%9E%8B%E4%BD%BF%E7%94%A8%E6%95%99%E5%AD%B8

列舉其實不是必要的東西

但是他可以讓你比較好閱讀

在這我就用遊戲狀態來當作範例
enum
public class Test : MonoBehaviour {
   
    // 列舉遊戲狀態
    enum GameStatus
    {
      GAME_READY, // 遊戲準備
      GAME_START, // 遊戲開始
      GAME_OVER   // 遊戲結束
    }

    // 宣告你的列舉變數 遊戲狀態
    GameStatus gameStatus;

    // Use this for initialization
    void Start ()
    {
      // 用switch來判斷你的列舉狀態
      // switch不懂可以查閱我的 (3)C# 的教學
      switch (gameStatus)
      {
            case GameStatus.GAME_READY:
                Debug.Log("GAME_READY");
                break;
            case GameStatus.GAME_START:
                Debug.Log("GAME_START");
                break;
            case GameStatus.GAME_OVER:
                Debug.Log("GAME_OVER");
                break;
      }
    }
}

哪這邊也補充一下一些重點

其實如果你看過我的switch的教學

你會發現列舉跟他是一樣的

只是如果你都用int來表示久了以後

你回來看你的程式你會被這數字搞瘋

1是代表什麼 ?? 2是什麼

這就是列舉的好處方便我們閱讀 一看就知道是什麼樣的狀態

那列舉其實也有int值表示 程式中都會從0開始 (像是索引值)

但是我們是可以修改他的

// 列舉遊戲狀態 (預設的int值)
enum GameStatus
{
   GAME_READY, // int值為0
   GAME_START, // int值為1
   GAME_OVER   // int值為2
}

// 列舉遊戲狀態 (修改int值)
enum GameStatus
{
   GAME_READY = 0, // 遊戲準備
   GAME_START = 2, // 遊戲開始
   GAME_OVER = 1   // 遊戲結束
}


你可以將你的列舉印出Log來看看 前面用(int)將他轉型


Debug.Log((int)GameStatus.GAME_START);


你會發現你的Start已經變為2了

那他的規則就是

如果你沒修改他他就依照上一個的int值來+1

而如是以下的狀態


// 列舉遊戲狀態
enum GameStatus
{
   GAME_READY = 0, // 遊戲準備
   GAME_START,   // 遊戲開始
   GAME_OVER = 1,// 遊戲結束
   MAX
}
// GAME_READY = 0,= 0 (固定值)
// GAME_START,      = 1 (前一個+1)
// GAME_OVER = 1,   = 1 (固定值)
// MAX            = 2 (前一個+1)


那在這邊我會講int轉型是因為

同樣的我們也可以將int轉為列舉

Debug.Log((GameStatus)2);
這時候的int數就會變成列舉索引2的MAX

在某些情況下你會用數字來代表

你就可以將這數字轉成你的列舉狀態
頁: [1]
查看完整版本: C# enum列舉類型使用教學<轉>