【发布时间】:2009-06-01 16:17:14
【问题描述】:
我有一个我正在使用 VB.NET Windows 应用程序处理的相当无意义的代码列表。对于我为处理这些代码而编写的业务逻辑,我想使用有意义的常量(如ServiceNotCovered 或MemberNotEligible)而不是原始代码(如"SNCV" 和"MNEL")。
据我所知,枚举只能映射到数值,不能映射到字符串。所以我能想到的最好的方法是一个静态类,它将常量公开为静态只读字符串字段,这些字段在内部设置为等于代码值,如下所示。
Public Class MyClass
private _reasonCode as String()
Public Property ReasonCode() As String
'Getter and Setter...
End Property
Public Class ReasonCodeEnum
Private Sub New()
End Sub
Public Shared ReadOnly ServiceNotCovered As String = "SNCV"
Public Shared ReadOnly MemberNotEligible As String = "MNEL"
'And so forth...
End Class
End Class
'Calling method
Public Sub ProcessInput()
Dim obj As New MyClass()
Select Case obj.ReasonCode
Case MyClass.ReasonCodeEnum.ServiceNotCovered
'Do one thing
Case MyClass.ReasonCodeEnum.MemberNotEligible
'Do something different
'Other enum value cases and default
End Select
End Sub
在上面的示例中,如果我可以将 MyClass.ReasonCode 定义为具有类型 ReasonCodeEnum,那就太好了,但是我必须使 ReasonCodeEnum 成为一个非静态类并给它一种设置和返回的方法价值。
我想知道是否有一种方法可以使用内置的 Enum 功能来做我正在做的事情,或者如果没有,是否有任何标准的设计模式用于这种类型的事情。
【问题讨论】:
-
我个人认为你应该找到一种数据驱动的方法;事实上,如果你想出一个新代码,你必须重新编译。我的鼻子不喜欢它。如果我有一个明确的答案,那么我会在下面放一个。
-
这取决于 - 如果一个新代码总是意味着为应用程序的各个部分制定不同的行为,这似乎并不太不合理。
-
这是监管机构定义的记录布局。如果他们提出新代码,我们无论如何都必须为其定义新行为。
标签: .net vb.net enums constants