我需要一个通用函数来基于枚举的XmlEnumAttribute“Name”属性检索枚举的名称或值。例如我有以下枚举定义:基于XmlEnumAttribute名称值检索枚举值
Public Enum Currency
<XmlEnum("00")> CDN = 1
<XmlEnum("01")> USA= 2
<XmlEnum("02")> EUR= 3
<XmlEnum("03")> JPN= 4
End Enum
第一个货币枚举值是1;枚举名称是“CDN”;并且XMLEnumAttribute名称属性值是“00”。
如果我有枚举值,我可以使用下面的通用函数检索XmlEnumAttribute“名称”值:
Public Function GetXmlAttrNameFromEnumValue(Of T)(ByVal pEnumVal As T) As String
Dim type As Type = pEnumVal.GetType
Dim info As FieldInfo = type.GetField([Enum].GetName(GetType(T), pEnumVal))
Dim att As XmlEnumAttribute = CType(info.GetCustomAttributes(GetType(XmlEnumAttribute), False)(0), XmlEnumAttribute) 'If there is an xmlattribute defined, return the name
Return att.Name
End Function
因此,使用上述功能,我可以指定货币枚举类型,传值为1,返回值为“00”。
我需要的是一个函数执行,如果相反。如果我有XmlEnumAttribute名称值“00”,我需要一个函数返回一个值为1的货币枚举。正如有用的将是一个函数,将返回枚举名称“CDN”。然后我可以简单地解析这个来获得枚举值。
任何援助将不胜感激。
感谢您的回复。 – Dean 2010-07-05 17:03:46
你可以考虑在'GetCode'方法中添加'where T:struct'作为约束,因为根据我的知识,枚举永远不会是引用类型。(枚举以外的结构将能够通过,但它仍然是一个不错的小改进恕我直言) –
2017-10-11 09:15:56