Resharper Code Inspection错误?

时间:2014-12-20 02:28:49

标签: vb.net resharper

示例:

Public Enum Vehicles As Integer
    Car = 0
    MotorBike = 1
    Plane = 2
End Enum

要获取每个车辆成员的价值(012),我想我必须这样投出:

DirectCast(Vehicles.Car, Integer)

它工作正常,但是,Resharper在intellisense上发出此警告:

  

“无法将Vehicle类型的表达式转换为Integer类型”

为什么?这是一个错误吗?还有另一种方法可以让我在不转换的情况下获得每个成员的价值吗? (Cint等......)

1 个答案:

答案 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并不需要这样的关系。