Enum.ToString()

接手舊專案遇到一些棘手的問題, 因為一個很蠢的設計而學到新東西.

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 中的小毛病… 總之

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料