在VB.NET中validation枚举值是有效的

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

我负责validation枚举包含递增的值。

代码如下所示:

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

每个Enum值也有一个描述(Custom)属性。 文件和描述属性在其他地方使用…它看起来像程序员更新枚举和使用自定义属性的帮助消息,而不是资源文件等与一个新的整数值…

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

NewEnumItem = 1383

我需要确保(在编译期间,我们有一个自定义的MSBuild任务,做很多其他处理),如果枚举递增顺序,而且它还没有被使用。

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

我正在考虑迭代并检查当前值是否为前一个值的+1(因此它是连续的,因为必须始终为+1,所以它不能被使用)。 这似乎有瑕疵或我不了解有关.NET枚举的东西?

埃米

如果您设置第一个值,然后排除所有以下值,它们是增量。 例如…

 Public Enum testingum first = 1001 second third End Enum 

所以second将是1002 third将是1003等等…

如果由于某种原因,你需要跳过某些值,那么你可以强制增量开始在一个较高的值,例如..

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

所以在这个例子中, fourth是2000年, fifth是2001年

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

 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