前言
C# 的列舉,骨子裡就是數字。
Sent = 2 編譯後就是一個整數常數,執行期比對、預設 JSON 序列化、存進 DB,全都是 2。
數字對機器很友善,對人就不是這麼回事了:
前端拿到 2 要自己查對照表,DB 撈出一排 2 和 4 根本不知道是什麼。
所以實務上我們一直在做同一件事:給 enum 補一個「給人看、給外部系統用」的字串。
那直接用成員名稱(Sent)不行嗎?不太行。
它受 C# 識別字規則限制(PascalCase、不能有空格或連字號),
而且哪天重構改名,外部契約就跟著爆炸,不適合直接拿去對外。
於是「用 attribute 給 enum 成員掛一個字串」這個需求,就這樣貫穿了 .NET 二十多年的歷史,
而且每一代序列化技術都自己重新發明了一次。