我认为“为什么枚举需要显式转换为 int 类型?”的答案。是不是 C# 中的强类型枚举是防止常见编程错误的有用防御措施。
假设我有一个基于两个枚举的绘画管理应用程序:
enum Textures { Gloss, Satin, Matt };
enum Colors { White, Green, Red, Blue, Brown };
还有一个像这样的房间绘画方法:
private void PaintRoom (Textures texture, Colors color)
在像 C# 这样具有强枚举类型的语言中,这样的命令:
// nonsensical attempt to have texture=White and color=Matt
PaintRoom(Colors.White, Textures.Matt);
...会产生编译时错误(无法将颜色放入预期纹理的位置,反之亦然)。但是在枚举不是强类型和/或可能发生隐式转换的语言中(包括 C 和 C++),我们的Colors 和我们的Textures 都可以被视为int,所以我们可以愉快地发出PaintRoom(Colors.White, Textures.Matt) 命令,它会编译得很好,但我们最终得到了一个漆成光泽红 (0, 2) 的房间,而不是我们想要的哑光白 (2, 0),并且快速浏览的代码似乎在说。
因此,强类型枚举主要是一件好事,可以防止人们不小心将枚举放入不适合的地方。如果有人真的希望他们的枚举是int,C# 会强制编码人员通过坚持显式转换来明确他们的意图。