2011-03-23 83 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年