2010-09-10 54 views
0

枚举我需要在VB.NET上枚举一个NOT操作(.NET 2),这可能吗?反转在VB.NET

<DefaultValue(0)> _ 
    Public Enum Orientation 
    Descending = -1 
    Undefined = 0 
    Ascending = 1 
    End Enum 

由前为了定义一个操做

myObj1.Orientation = Not myObj2.Orientation 

规则:

Desceding > Ascending, 
Ascending > Desceding, 
Undefined > Undefined 

回答

0

一般来说,你需要为唯一的代码了具体的方法,你知道每个枚举值的倒数是什么。

有可能是简单枚举更容易的方法,但如果有摆明值之间的复杂关系,是唯一的出路。

(你必须原谅C#风格的伪代码。)

public Orientation invert(Orientation original) 
{ 
    Orientation result; 
    switch (original) 
    { 
     case Orientation.Descending: 
      result = Orientation.Ascending; 
      break; 
     case Orientation.Ascending: 
      result = Orientation.Descending; 
      break; 
     default: 
      result = original; 
      break; 
    } 
    return result; 
} 
+0

'回报-1 * original'似乎够了:)但是谢谢! – serhio 2010-09-10 14:01:52

+0

@serhio - 将在此情况下工作,但在未指定枚举值,一般情况下,你必须做到这一点。 – ChrisF 2010-09-10 14:12:40

5

还有就是要做到这一点,因为所列举的都是对整型整型和Not没有通用的方法执行按位操作是不是你想要的东西。然而,在你的情况,你可以简单地写反转取向的方法:

Module OrientationExtensions 

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

End Module 

用法:

Dim orientation As Orientation 
orientation = Module1.Orientation.Ascending 
orientation = orientation.Invert() 
+0

我可以附加这个方法是枚举成员吗? – serhio 2010-09-10 10:39:47

+0

@serhio:是的,你可以把它变成一个扩展方法,请参阅我的更新答案。您可以将它用于.NET 2.0,但您需要具有C#3.0编译器(即Visual Studio 2008或更高版本)。如果你没有那么简单使用这样的功能:'方向=反转(方向)' – 2010-09-10 10:43:11

0

您可以创建一个扩展方法:

Imports System.Runtime.CompilerServices 

Module OrientationExtensions 

    <Extension()> 
    Public Function Invert(ByVal orientation As Orientation) As Orientation 
    If orientation = Orientation.Ascending Then 
     Return Orientation.Descending 
    ElseIf orientation = Orientation.Descending Then 
     Return Orientation.Ascending 
    Else 
     Return Orientation.Undefined 
    End If 
    End Function 

End Module 

然后你可以使用它是这样的:

Dim orientation As Orientation = Orientation.Ascending 
Dim inverseOrientation As Orientation = orientation.Invert 
+0

注.NET版本2 – serhio 2010-09-10 10:37:01