Visual Basic .NET Language
enum
खोज…
Enum परिभाषा
एनुम तार्किक रूप से संबंधित स्थिरांक का एक सेट है।
Enum Size
Small
Medium
Large
End Enum
Public Sub Order(shirtSize As Size)
Select Case shirtSize
Case Size.Small
' ...
Case Size.Medium
' ...
Case Size.Large
' ...
End Select
End Sub
सदस्य आरंभीकरण
इनम सदस्यों में से प्रत्येक को एक मूल्य के साथ आरंभ किया जा सकता है। यदि किसी सदस्य के लिए कोई मान निर्दिष्ट नहीं किया गया है, तो डिफ़ॉल्ट रूप से इसे 0 से प्रारंभ किया जाता है (यदि यह सदस्य सूची में पहला सदस्य है) या पूर्ववर्ती सदस्य के मूल्य से 1 से अधिक मूल्य पर है।
Module Module1
Enum Size
Small
Medium = 3
Large
End Enum
Sub Main()
Console.WriteLine(Size.Small) ' prints 0
Console.WriteLine(Size.Medium) ' prints 3
Console.WriteLine(Size.Large) ' prints 4
' Waits until user presses any key
Console.ReadKey()
End Sub
End Module
झंडे की विशेषता
<Flags>
विशेषता के साथ, एनम झंडे का एक सेट बन जाता है। यह विशेषता एक एनम चर के लिए कई मान निर्दिष्ट करने में सक्षम बनाता है। एक झंडे के सदस्यों को 2 (1, 2, 4, 8 ...) की शक्तियों के साथ आरंभ किया जाना चाहिए।
Module Module1
<Flags>
Enum Material
Wood = 1
Plastic = 2
Metal = 4
Stone = 8
End Enum
Sub Main()
Dim houseMaterials As Material = Material.Wood Or Material.Stone
Dim carMaterials as Material = Material.Plastic Or Material.Metal
Dim knifeMaterials as Material = Material.Metal
Console.WriteLine(houseMaterials.ToString()) 'Prints "Wood, Stone"
Console.WriteLine(CType(carMaterials, Integer)) 'Prints 6
End Sub
End Module
HasFlag ()
यदि कोई ध्वज सेट है, तो यह HasFlag()
लिए HasFlag()
विधि का उपयोग किया जा सकता है।
Module Module1
<Flags>
Enum Material
Wood = 1
Plastic = 2
Metal = 4
Stone = 8
End Enum
Sub Main()
Dim houseMaterials As Material = Material.Wood Or Material.Stone
If houseMaterials.HasFlag(Material.Stone) Then
Console.WriteLine("the house is made of stone")
Else
Console.WriteLine("the house is not made of stone")
End If
End Sub
End Module
झंडे-विशेषता के बारे में अधिक जानकारी के लिए और इसका उपयोग कैसे किया जाना चाहिए यह आधिकारिक Microsoft दस्तावेज़ीकरण देखें ।
स्ट्रिंग पार्सिंग
Enum का एक स्ट्रिंग प्रतिनिधित्व पार्स करके एक Enum उदाहरण बनाया जा सकता है।
Module Module1
Enum Size
Small
Medium
Large
End Enum
Sub Main()
Dim shirtSize As Size = DirectCast([Enum].Parse(GetType(Size), "Medium"), Size)
' Prints 'Medium'
Console.WriteLine(shirtSize.ToString())
' Waits until user presses any key
Console.ReadKey()
End Sub
End Module
इसे भी देखें: VB.NET में Enum मान के लिए एक स्ट्रिंग पार्स करें
GetNames ()
एक स्ट्रिंग सरणी के रूप में निर्दिष्ट Enum में स्थिरांक के नाम लौटाता है:
Module Module1
Enum Size
Small
Medium
Large
End Enum
Sub Main()
Dim sizes = [Enum].GetNames(GetType(Size))
For Each size In sizes
Console.WriteLine(size)
Next
End Sub
End Module
आउटपुट:
छोटा
मध्यम
विशाल
GetValues ()
'यह विधि एनम मूल्यों के पुनरावृत्ति के लिए उपयोगी है'
Enum Animal
Dog = 1
Cat = 2
Frog = 4
End Enum
Dim Animals = [Enum].GetValues(GetType(Animal))
For Each animal in Animals
Console.WriteLine(animal)
Next
प्रिंटों:
1
2
4
तार()
एक Enum पर ToString
विधि एन्यूमरेशन का स्ट्रिंग नाम देता है। उदाहरण के लिए:
Module Module1
Enum Size
Small
Medium
Large
End Enum
Sub Main()
Dim shirtSize As Size = Size.Medium
Dim output As String = shirtSize.ToString()
Console.WriteLine(output) ' Writes "Medium"
End Sub
End Module
यदि, हालांकि, एनम के वास्तविक पूर्णांक मान का स्ट्रिंग प्रतिनिधित्व वांछित है, तो आप एनम को एक Integer
और फिर ToString
कॉल ToString
:
Dim shirtSize As Size = Size.Medium
Dim output As String = CInt(shirtSize).ToString()
Console.WriteLine(output) ' Writes "1"
यह निर्धारित करें कि किसी Enum में FlagsAttribute निर्दिष्ट है या नहीं
अगले उदाहरण का उपयोग यह निर्धारित करने के लिए किया जा सकता है कि किसी एन्यूमरेशन में फ्लैगसएट्रिब्यूट निर्दिष्ट है या नहीं। उपयोग की गई कार्यप्रणाली परावर्तन पर आधारित है।
यह उदाहरण एक True
परिणाम देगा:
Dim enu As [Enum] = New FileAttributes()
Dim hasFlags As Boolean = enu.GetType().GetCustomAttributes(GetType(FlagsAttribute), inherit:=False).Any()
Console.WriteLine("{0} Enum has FlagsAttribute?: {1}", enu.GetType().Name, hasFlags)
यह उदाहरण एक False
परिणाम देगा:
Dim enu As [Enum] = New ConsoleColor()
Dim hasFlags As Boolean = enu.GetType().GetCustomAttributes(GetType(FlagsAttribute), inherit:=False).Any()
Console.WriteLine("{0} Enum has FlagsAttribute?: {1}", enu.GetType().Name, hasFlags)
हम इस तरह से एक सामान्य उपयोग विस्तार विधि डिजाइन कर सकते हैं:
<DebuggerStepThrough>
<Extension>
<EditorBrowsable(EditorBrowsableState.Always)>
Public Function HasFlagsAttribute(ByVal sender As [Enum]) As Boolean
Return sender.GetType().GetCustomAttributes(GetType(FlagsAttribute), inherit:=False).Any()
End Function
उपयोग उदाहरण:
Dim result As Boolean = (New FileAttributes).HasFlagsAttribute()
प्रत्येक ध्वज के लिए (ध्वज पुनरावृत्ति)
कुछ बहुत विशिष्ट परिदृश्यों में हमें स्रोत गणन के प्रत्येक झंडे के लिए एक विशिष्ट क्रिया करने की आवश्यकता महसूस होगी।
हम इस कार्य को साकार करने के लिए एक साधारण जेनेरिक एक्सटेंशन विधि लिख सकते हैं।
<DebuggerStepThrough>
<Extension>
<EditorBrowsable(EditorBrowsableState.Always)>
Public Sub ForEachFlag(Of T)(ByVal sender As [Enum],
ByVal action As Action(Of T))
For Each flag As T In sender.Flags(Of T)
action.Invoke(flag)
Next flag
End Sub
उपयोग उदाहरण:
Dim flags As FileAttributes = (FileAttributes.ReadOnly Or FileAttributes.Hidden)
flags.ForEachFlag(Of FileAttributes)(
Sub(ByVal x As FileAttributes)
Console.WriteLine(x.ToString())
End Sub)
एक ध्वज संयोजन में झंडे की मात्रा निर्धारित करें
अगला उदाहरण निर्दिष्ट ध्वज संयोजन में झंडे की मात्रा की गणना करना है।
एक विस्तार विधि के रूप में उदाहरण दिया गया है:
<DebuggerStepThrough>
<Extension>
<EditorBrowsable(EditorBrowsableState.Always)>
Public Function CountFlags(ByVal sender As [Enum]) As Integer
Return sender.ToString().Split(","c).Count()
End Function
उपयोग उदाहरण:
Dim flags As FileAttributes = (FileAttributes.Archive Or FileAttributes.Compressed)
Dim count As Integer = flags.CountFlags()
Console.WriteLine(count)
एक Enum में निकटतम मूल्य का पता लगाएं
अगला कोड दिखाता है कि किसी Enum का निकटतम मान कैसे पाया जाए।
पहले हम इस Enum को परिभाषित करते हैं जो खोज मापदंड (खोज दिशा) निर्दिष्ट करने के लिए काम करेगा
Public Enum EnumFindDirection As Integer
Nearest = 0
Less = 1
LessOrEqual = 2
Greater = 3
GreaterOrEqual = 4
End Enum
और अब हम खोज एल्गोरिथ्म को लागू करते हैं:
<DebuggerStepThrough>
Public Shared Function FindNearestEnumValue(Of T)(ByVal value As Long,
ByVal direction As EnumFindDirection) As T
Select Case direction
Case EnumFindDirection.Nearest
Return (From enumValue As T In [Enum].GetValues(GetType(T)).Cast(Of T)()
Order By Math.Abs(value - Convert.ToInt64(enumValue))
).FirstOrDefault
Case EnumFindDirection.Less
If value < Convert.ToInt64([Enum].GetValues(GetType(T)).Cast(Of T).First) Then
Return [Enum].GetValues(GetType(T)).Cast(Of T).FirstOrDefault
Else
Return (From enumValue As T In [Enum].GetValues(GetType(T)).Cast(Of T)()
Where Convert.ToInt64(enumValue) < value
).LastOrDefault
End If
Case EnumFindDirection.LessOrEqual
If value < Convert.ToInt64([Enum].GetValues(GetType(T)).Cast(Of T).First) Then
Return [Enum].GetValues(GetType(T)).Cast(Of T).FirstOrDefault
Else
Return (From enumValue As T In [Enum].GetValues(GetType(T)).Cast(Of T)()
Where Convert.ToInt64(enumValue) <= value
).LastOrDefault
End If
Case EnumFindDirection.Greater
If value > Convert.ToInt64([Enum].GetValues(GetType(T)).Cast(Of T).Last) Then
Return [Enum].GetValues(GetType(T)).Cast(Of T).LastOrDefault
Else
Return (From enumValue As T In [Enum].GetValues(GetType(T)).Cast(Of T)()
Where Convert.ToInt64(enumValue) > value
).FirstOrDefault
End If
Case EnumFindDirection.GreaterOrEqual
If value > Convert.ToInt64([Enum].GetValues(GetType(T)).Cast(Of T).Last) Then
Return [Enum].GetValues(GetType(T)).Cast(Of T).LastOrDefault
Else
Return (From enumValue As T In [Enum].GetValues(GetType(T)).Cast(Of T)()
Where Convert.ToInt64(enumValue) >= value
).FirstOrDefault
End If
End Select
End Function
उपयोग उदाहरण:
Public Enum Bitrate As Integer
Kbps128 = 128
Kbps192 = 192
Kbps256 = 256
Kbps320 = 320
End Enum
Dim nearestValue As Bitrate = FindNearestEnumValue(Of Bitrate)(224, EnumFindDirection.GreaterOrEqual)