1

我正在寻找一种在 (vb).NET 中枚举字符串类型的方法,但 .NET 枚举只接受数字类型值。

我遇到的第一个选择是创建一个包含我的枚举值和我想要返回的字符串的字典。这很有效,但很难维护,因为如果您更改了枚举,您还必须记住还要更改字典。

第二种选择是在每个枚举成员上设置字段属性,并使用反射检索它。当然,这也很有效,也解决了维护问题,但它使用反射,我一直读到使用反射应该是最后的手段。

所以我开始思考,我想出了这个:每个 ASCII 字符都可以表示为一个十六进制值,并且可以将十六进制值分配给枚举成员。您可以摆脱属性,将十六进制值分配给枚举成员。然后,当您需要文本值时,将该值转换为字节数组并用于 System.Text.Encodings.ASCII.GetString(enumMemberBytes)获取字符串值。

现在根据经验,我想出的任何东西通常要么有缺陷,要么就是完全错误的。大家觉得这种做法怎么样?有什么理由不这样做吗?

谢谢。

编辑

正如 David W 所指出的,枚举成员值的长度是有限的,具体取决于底层类型(默认为整数)。所以是的,我相信我的方法有效,但您仅限于ASCII 表中的字符,最大长度为 4 或 8 个字符,分别使用整数或长整数。

4

1 回答 1

1

我发现将枚举的字符串表示动态解析为实际枚举类型的最简单方法是执行以下操作:

Private EnumObject
     [Undefined]
     ValueA
     ValueB
End Enum

dim enumVal as EnumObject = DirectCast([Enum].Parse(GetType(EnumObject), "ValueA"), EnumObject)

这消除了维护字典的需要,并允许您只处理字符串而不是转换为 Int 或 Long。这确实使用了反射,但只要您使用 String Parse 捕获并处理任何异常,我就没有遇到任何问题。

于 2012-04-24T21:25:18.557 回答