2010-09-10 51 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