在 Visual Basic 中,枚举(Enum)用于声明命名的整数常量,这提高了代码的可读性和可维护性。枚举的声明如下:
Public Enum StatusCode Success = 0 Warning = 1 Error = 2 End Enum
重要细节:
使用示例:
Dim code As StatusCode = StatusCode.Success If code = StatusCode.Error Then Console.WriteLine("错误!") End If ' 赋值一个不存在的值 code = CType(5, StatusCode) ' 这将编译,但该值在 Enum 中未定义
可以将 Enum 类型的变量赋值为 Enum 中未列出的值吗?这可能会导致什么后果?
是的,在 Visual Basic(和 .NET 整体)中,可以通过显式转换(
CType,DirectCast)将任何适合的(基于基础类型)数值赋给 Enum 变量。这不会引发编译错误,但会在后续使用中导致潜在问题,因为这些值不会显示为 Enum 元素的名称,且无法通过 ToString 类型的方法正确解析。例如:
Dim code As StatusCode = CType(42, StatusCode) Console.WriteLine(code) ' 输出 '42',而不是 Enum 元素的名称
故事
在一个大型项目中,开发人员通过 WebAPI 传递状态为 int,然后在客户端将其转换为 Enum。当出现新的值而未添加到 Enum 时,由于缺少对 Enum 值的“有效性”检查,应用程序未能显示正确的信息。
故事
在没有使用 Option Strict 的情况下使用 Enum,导致从外部来源获取的随机数值被隐式转换为 Enum,从而引发在运行时难以跟踪的业务逻辑错误。
故事
没有明确指定 Enum 的基础类型(例如,为了节省内存使用 Byte)导致在 Compact Framework 的狭窄微控制器解决方案中出现意外的整型溢出。