2011-03-23 82 views
1

我的英文可能不太好,所以請原諒我,如果我沒有意義。驗證枚舉值在VB.NET中有效

我負責驗證一個枚舉包含遞增值。

的代碼看起來是這樣的:

Public Enum AccountMessageDescriptor 
    AccountInvalid = 1001 
    AccountReviewPending=1002 
    ... 
    InvalidOperationOnAccount=1382 
End Enum 

每個枚舉值具有描述(自定義)屬性也。文件和說明屬性用於其他地方......它看起來像程序員更新枚舉和使用幫助信息,而不是資源文件等有新的整數值自定義屬性...

例如,另一個錯誤可能被添加爲:

NewEnumItem = 1383

我需要確保(在編譯的時候,我們有一個自定義的MSBuild任務,做很多其他的處理)如果枚舉按順序遞增,而且其尚未使用。

有人建議使用集合,檢查枚舉值是否已經存在,如果沒有插入它。

我想的只是通過迭代和檢查,如果當前值+1的前值(因此它的順序,也不能在使用中已經因爲它永遠是+1)。這似乎有瑕疵或我不瞭解有關.NET枚舉的東西?

埃米

回答

0

要通過遍歷枚舉,你可以嘗試以下方法:

For Each amd As AccountMessageDescriptor In [Enum].GetValues(GetType(AccountMessageDescriptor)) 
     'Do your thing here 
Next 

我不enterily知道,如果這樣的數值是連續的,但快速測試可以排序了這一點爲你。

或者你可以將所有的值存儲在數組中,並檢查值順序:

Dim allAMD As AccountMessageDescriptor() = DirectCast([Enum].GetValues(GetType(AccountMessageDescriptor)), AccountMessageDescriptor()) 

'Loop through array and check with previous 
+0

忽略了一個事實,我t是VB.Net。代碼轉換。 – Koen 2011-03-23 10:57:08

1

如果您設置的第一個值,然後排除所有下面的值,他們會增量。如...

Public Enum testenum 
    first = 1001 
    second 
    third 
End Enum 

所以second將是1002 third將是1003等等...

如果由於某種原因你需要跳過某些值,則可以強制增量在開始較高的值,例如,..

Public Enum testenum 
    first = 1001 
    second 
    third 
    fourth = 2000 
    fifth 
End Enum 

所以在這個例子fourth將是2000年和fifth將是2001年