我的英语可能不是很好,所以如果我没有意义,请原谅我。
我的任务是验证枚举是否包含递增值。
代码如下所示:
Public Enum AccountMessageDescriptor
AccountInvalid = 1001
AccountReviewPending=1002
...
InvalidOperationOnAccount=1382
End Enum
每个枚举值也具有描述(自定义)属性。文件和描述属性在别处使用...看起来程序员更新枚举并使用自定义属性来获取帮助消息而不是资源文件等,并使用新的整数值......
例如,可能会添加另一个错误:
NewEnumItem = 1383
我需要确保(在构建期间我们有一个自定义MSBuild任务执行大量其他处理)如果枚举按顺序递增并且它尚未使用。
有人建议使用集合,检查枚举值是否已经存在,如果没有插入它。
我正在考虑只是迭代并检查当前值是否为前一个值+1(因此它的顺序并且它不能已经被使用,因为它必须始终为+1)。这看起来有缺陷还是我不了解.NET枚举?
埃米
答案 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