接手舊專案遇到一些棘手的問題, 因為一個很蠢的設計而學到新東西.
public enum level { entry = 1, start = 2, test = 3, keepGoing = 4 tutorialEnd = keepGoing, // Optional level SideQuestA = 10, SideQuestB = 11 } Debug.Log(level.keepGoing.ToString()); // tutorialEnd Debug.Log(level.tutorialEnd.ToString()); // keepGoing
以上是正常的 Enum 架構, 可是輸出的部分很奇妙的竟然互換了,
互換的原因不清楚但在 MSDN 中找到 Enum 專用的 ToString() 原來有預設參數 “G”.
而且在參照數值相同的情況下, ToString() 是不能準確分辦到底 level.KeepGoing 跟 level.tutorialEnd 有甚麼分別.
參考: https://msdn.microsoft.com/en-us/library/a0h36syw(v=vs.110).aspx
可以使用的參數分別是 “G”,”X”,”D”,”F” 空參數則預設為 G.
這部分跟 Msdn 的說法有出入, 依測試在 Unity3d 裡頭的 C# 需使用 “F” 才能正確回傳可判斷用的字串.
Debug.Log(level.keepGoing.ToString("F")); // keepGoing Debug.Log(level.tutorialEnd.ToString("F")); // tutorialEnd
不確定是 msdn 錯誤還是 unity3d 中的小毛病… 總之