示例:
Public Enum Vehicles As Integer
Car = 0
MotorBike = 1
Plane = 2
End Enum
要获取每个车辆成员的价值(0
,1
,2
),我想我必须这样投出:
DirectCast(Vehicles.Car, Integer)
它工作正常,但是,Resharper在intellisense上发出此警告:
“无法将Vehicle类型的表达式转换为Integer类型”
为什么?这是一个错误吗?还有另一种方法可以让我在不转换的情况下获得每个成员的价值吗? (Cint等......)
答案 0 :(得分:2)
首先,惯例规定您的枚举名为Vehicle
,即单数,而不是Vehicles
,即复数。如果对值使用2的幂并应用Flags
属性,则应仅对枚举使用复数名称,从而允许该类型的变量同时存储多个值,例如
<Flags>
Public Enum Vehicles As Integer
Car = 1
MotorBike = 2
Plane = 4
End Enum
显然,在这种特殊情况下这是恰当的,但是有很多枚举声明。
至于问题,它可能是ReSharper中的一个错误,因为VB代码编译并运行没有问题。我的猜测是,当使用DirectCast
时,ReSharper会寻找直接继承或实现关系,在枚举和整数类型的情况下它不会找到。如果您使用CInt
代替那么您就不会收到警告,因为CInt
并不需要这样的关系。