摘要:兩個差不多內容的enum做轉換時要注意的小地方,不要一時偷懶埋下日後出錯的總種子!
假設我們有兩個enum,
public enum Colors {Red, Green, Blue}
public enum BgColors {Red, Black, Green, Blue }
看起來差不多。
有一天有需要把一個形態轉成另一個來用。我們可能會寫成這樣:
Colors font_color = Colors.Blue; BgColor bg = (BgColor)font_color;
看起來可以,編譯也會對。但實際上是不對的,因為實際上是轉成enum所代表的int,對應的結果往往不是我們想要的。
正確的作法是
Colors font_color = Colors.Blue; (BgColor)Enum.Parse(typeof(BgColor), font_color.ToString());
這是很簡單的一個觀念,但常常一時偷懶就寫成上面的寫法。雖然一開始將兩個enum宣告成一樣的內容(順序)沒有問題,但日後如果其中之一有變動,造成順序有更改的話,不僅編譯的時候不會發現錯誤,甚至執行完也都感覺不出來,結果是錯誤的而不自自知! 還滿可怕的。