टैगिंग का उपयोग करने के बारे में कैसे।कुछ की तरह:
Public Class StringValueAttribute
Inherits Attribute
Public Property Value As String
Public Sub New(ByVal val As String)
Value = val
End Sub
End Class
यह बाहर निकलने के लिए: तो (का उपयोग कर Enum प्राप्त करने के लिए एक कॉल
Public Function GetEnumByStringValueAttribute(value As String, enumType As Type) As Object
For Each val As [Enum] In [Enum].GetValues(enumType)
Dim fi As FieldInfo = enumType.GetField(val.ToString())
Dim attributes As StringValueAttribute() = DirectCast(fi.GetCustomAttributes(GetType(StringValueAttribute), False), StringValueAttribute())
Dim attr As StringValueAttribute = attributes(0)
If attr.Value = value Then
Return val
End If
Next
Throw New ArgumentException("The value '" & value & "' is not supported.")
End Function
Public Function GetEnumByStringValueAttribute(Of YourEnumType)(value As String) As YourEnumType
Return CType(GetEnumByStringValueAttribute(value, GetType(YourEnumType)), YourEnumType)
End Function
और
Public Enum MyEnum
<StringValue("Personal Contact")>Contact
<StringValue("My PersonalInfo")>PersonalInfo
End Enum
आप के रूप StringValue विशेषता लिखने के लिए होता है स्ट्रिंग विशेषता):
Dim mEnum as MyEnum = GetEnumByStringValueAttribute(Of MyEnum)("Personal Contact")
"गुण" मूल्य बाहर निकलने के लिए (से निपटने स्पष्टता के लिए 'कुछ भी नहीं' हटा):
Public Function GetEnumValue(Of YourEnumType)(p As YourEnumType) As String
Return DirectCast(Attribute.GetCustomAttribute(ForValue(p), GetType(StringValueAttribute)), StringValueAttribute).Value
End Function
Private Function ForValue(Of YourEnumType)(p As YourEnumType) As MemberInfo
Return GetType(YourEnumType).GetField([Enum].GetName(GetType(YourEnumType), p))
End Function
और कॉल स्ट्रिंग विशेषता (Enum का प्रयोग करके) प्राप्त करने के लिए:
Dim strValue as String = GetEnumValue(Of MyEnum)(MyEnum.Contact)
संरचना समाधान (स्लाई द्वारा) कोड की 4 पंक्तियों में एक ही चीज़ को पूरा करता है। –
@ जोनहार्बर एर्म ... नहीं। यह नहीं है। यह सिर्फ तारों का उपयोग करता है, इसलिए यह दृढ़ता से टाइप किए गए एनम पैटर्न के रूप में सुरक्षित प्रकार के रूप में नहीं है, इसे विस्तारित नहीं किया जा सकता है, और आप स्पष्ट रूपांतरण नहीं जोड़ सकते हैं। इसके अलावा, मुझे इस मामले में एक मॉड्यूल पर संरचना का उपयोग करने में एक बिंदु नहीं दिख रहा है। – sloth
यदि आप इस तरह की वस्तुओं को 'केस का चयन करें' में तुलना करना चाहते हैं, तो आपको 'कुंजी' सार्वजनिक बनाना चाहिए और '.Key 'का उपयोग करके तुलना करना चाहिए। – mbomb007