在VB.NET中反转枚举

ser*_*hio 0 .net vb.net .net-2.0

我需要对VB.NET(.NET 2)中的Enumeration进行NOT操作,是否可能?

  <DefaultValue(0)> _
  Public Enum Orientation
    Descending = -1
    Undefined = 0
    Ascending = 1
  End Enum
Run Code Online (Sandbox Code Playgroud)

通过ex定义一个Not操作来做

myObj1.Orientation = Not myObj2.Orientation
Run Code Online (Sandbox Code Playgroud)

规则:

Desceding > Ascending, 
Ascending > Desceding, 
Undefined > Undefined
Run Code Online (Sandbox Code Playgroud)

Dir*_*mar 5

没有通用的方法可以做到这一点,因为枚举是一个整数类型,而Not对于整数类型,这是一个按位操作,这不是你想要的.但是,在您的情况下,您可以简单地编写一个反转方向的方法:

Module OrientationExtensions

    <Extension()>
    Public Function Invert(ByVal orientation As Orientation) As Orientation
        Return -1 * orientation
    End Function

End Module
Run Code Online (Sandbox Code Playgroud)

用法:

Dim orientation As Orientation
orientation = Module1.Orientation.Ascending
orientation = orientation.Invert()
Run Code Online (Sandbox Code Playgroud)