验证枚举值在VB.NET中有效

时间:2011-03-23 10:31:40

标签: windows vb.net enums integer

我的英语可能不是很好,所以如果我没有意义,请原谅我。

我的任务是验证枚举是否包含递增值。

代码如下所示:

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

每个枚举值也具有描述(自定义)属性。文件和描述属性在别处使用...看起来程序员更新枚举并使用自定义属性来获取帮助消息而不是资源文件等,并使用新的整数值......

例如,可能会添加另一个错误:

NewEnumItem = 1383

我需要确保(在构建期间我们有一个自定义MSBuild任务执行大量其他处理)如果枚举按顺序递增并且它尚未使用。

有人建议使用集合,检查枚举值是否已经存在,如果没有插入它。

我正在考虑只是迭代并检查当前值是否为前一个值+1(因此它的顺序并且它不能已经被使用,因为它必须始终为+1)。这看起来有缺陷还是我不了解.NET枚举?

埃米

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

要遍历枚举,您可以尝试以下操作:

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

我不确定这样的值是否是连续的,但快速测试可以为你排序。

或者您可以将所有值存储在数组中并检查值是否是连续的:

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

'Loop through array and check with previous