我正在寻找一种方法来枚举(vb).NET中的字符串类型,但是.NET枚举只接受数值类型值。
我遇到的第一个选择是创建一个包含枚举值和我想返回的字符串的字典。这是可行的,但很难维护,因为如果您更改了枚举,您必须记住也要更改字典。
第二个选择是在每个枚举成员上设置字段属性,并使用反射检索它。当然,这同样有效,也解决了维护问题,但它使用反射,我一直读到使用反射应该是最后的手段。
于是我开始思考,我想出了这样的想法:每个ASCII字符都可以表示为十六进制值,并且可以将十六进制值分配给枚举成员。您可以去掉属性,将十六进制值分配给枚举成员。然后,当需要文本值时,将值转换为字节数组,并使用System.Text.Encodings.ASCII.GetString(enumMemberBytes)获取字符串值。
说到经验,我想出的任何东西通常都是有缺陷的,或者是完全错误的。你们觉得这个方法怎么样?有什么理由不这样做吗?
谢谢。
编辑
正如David所指出的,枚举成员值的长度是有限的,这取决于基础类型(默认情况下是整数)。所以是的,我相信我的方法有效,但您只限于ASCII表中的字符,最大长度分别为4或8个字符使用整数或长。
发布于 2012-04-24 21:25:18
我发现将枚举的字符串表示动态解析为实际枚举类型的最简单方法是执行以下操作:
Private EnumObject
[Undefined]
ValueA
ValueB
End Enum
dim enumVal as EnumObject = DirectCast([Enum].Parse(GetType(EnumObject), "ValueA"), EnumObject)这消除了维护字典的需要,并允许您只处理字符串,而不是转换为Int或Long。这确实使用反射,但只要您捕获并处理String Parse的任何异常,我就不会遇到任何问题。
https://stackoverflow.com/questions/10304227
复制相似问题