Potrzebuję funkcji ogólnej, aby pobrać nazwę lub wartość wyliczenia na podstawie właściwości "Nazwa" obiektu wyliczeniowego XmlEnumAttribute. Na przykład mam następujące zdefiniowane wyrażenie:Odzyskaj wartość wyliczenia na podstawie wartości nazwy XmlEnumAttribute
Public Enum Currency
<XmlEnum("00")> CDN = 1
<XmlEnum("01")> USA= 2
<XmlEnum("02")> EUR= 3
<XmlEnum("03")> JPN= 4
End Enum
Pierwsza wartość wyliczenia waluty to 1; nazwa wyliczeniowa to "CDN"; a wartość właściwości Nazwa XMLEnumAttribute to "00".
Jeśli mam wartość enum, mogę odzyskać „Nazwa” wartość XmlEnumAttribute stosując następującą funkcję Generic:
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
Więc stosując powyższą funkcję, można określić typ enum walut, przekazać wartość 1, a wartością zwracaną będzie "00".
Potrzebuję funkcji do wykonania, jeśli jest odwrotnie. Jeśli mam wartość XmlEnumAttribute o wartości "00", potrzebuję funkcji zwracania wyliczenia waluty o wartości 1. Tak samo przydatna byłaby funkcja zwracająca nazwę wyliczeniową "CDN". Mógłbym wtedy po prostu przeanalizować to, aby uzyskać wartość wyliczeniową.
Każda pomoc zostanie doceniona.
Dziękuję za odpowiedź. – Dean
Możesz rozważyć dodanie 'where T: struct' jako ograniczenia metody' GetCode ', ponieważ wyliczenie nigdy nie będzie typem referencyjnym, o ile moja wiedza idzie.(Struktury inne niż wyliczenia będą w stanie przejść, ale nadal jest to mała poprawa IMHO) –