code.club

 找回密碼
 立即註冊
搜索
查看: 1706|回復: 0

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

[複製鏈接]
發表於 2022-10-11 15:48:00 | 顯示全部樓層 |閱讀模式
本帖最後由 2266 於 2022-10-11 15:51 編輯

https://a032332852.pixnet.net/bl ... 8%E6%95%99%E5%AD%B8

列舉其實不是必要的東西

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

在這我就用遊戲狀態來當作範例
enum
  1. public class Test : MonoBehaviour {
  2.    
  3.     // 列舉遊戲狀態
  4.     enum GameStatus
  5.     {
  6.         GAME_READY, // 遊戲準備
  7.         GAME_START, // 遊戲開始
  8.         GAME_OVER   // 遊戲結束
  9.     }

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

  12.     // Use this for initialization
  13.     void Start ()
  14.     {
  15.         // 用switch來判斷你的列舉狀態
  16.         // switch不懂可以查閱我的 (3)C# 的教學
  17.         switch (gameStatus)
  18.         {
  19.             case GameStatus.GAME_READY:
  20.                 Debug.Log("GAME_READY");
  21.                 break;
  22.             case GameStatus.GAME_START:
  23.                 Debug.Log("GAME_START");
  24.                 break;
  25.             case GameStatus.GAME_OVER:
  26.                 Debug.Log("GAME_OVER");
  27.                 break;
  28.         }
  29.     }
  30. }
複製代碼


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

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

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

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

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

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

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

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

但是我們是可以修改他的

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

  8. // 列舉遊戲狀態 (修改int值)
  9. enum GameStatus
  10. {
  11.      GAME_READY = 0, // 遊戲準備
  12.      GAME_START = 2, // 遊戲開始
  13.      GAME_OVER = 1   // 遊戲結束
  14. }

複製代碼

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


  1. Debug.Log((int)GameStatus.GAME_START);
複製代碼



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

那他的規則就是

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

而如是以下的狀態


  1. // 列舉遊戲狀態
  2. enum GameStatus
  3. {
  4.      GAME_READY = 0, // 遊戲準備
  5.      GAME_START,     // 遊戲開始
  6.      GAME_OVER = 1,  // 遊戲結束
  7.      MAX
  8. }
  9. // GAME_READY = 0,  = 0 (固定值)
  10. // GAME_START,      = 1 (前一個+1)
  11. // GAME_OVER = 1,   = 1 (固定值)
  12. // MAX              = 2 (前一個+1)
複製代碼



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

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

  1. Debug.Log((GameStatus)2);
複製代碼

這時候的int數就會變成列舉索引2的MAX

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

你就可以將這數字轉成你的列舉狀態
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|手機版|Archiver|code.club  

GMT+8, 2024-3-29 06:27 , Processed in 0.111262 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表