我需要一個通用函數來基於枚舉的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