Type.GetEnumValues() मेथड एनमरेशन टाइप के सभी कॉन्स्टेंट्स के मानों का ऐरे लौटाता है। यह केवल एनम टाइप्स पर काम करता है - अन्य टाइप्स पर ArgumentException फेंकता है।
उदाहरण 1: गलत टाइप पर GetEnumValues (एक्सेप्शन)
using System;
public class Demo {
public enum Vehicle { Car, Bus, Bike, Airplane }
public static void Main() {
try {
// गलत: typeof(int) एनम नहीं है
Type type = typeof(int);
string[] names = type.GetEnumNames(); // ArgumentException
Console.WriteLine("कॉन्स्टेंट नाम = " + string.Join(", ", names));
Array values = type.GetEnumValues(); // ArgumentException
Console.WriteLine("मान = " + values);
}
catch (ArgumentException e) {
Console.WriteLine("एनम नहीं है! " + e.GetType().Name + ": " + e.Message);
}
}
}
आउटपुट
एनम नहीं है! ArgumentException: Type must be an Enum.
उदाहरण 2: सही एनम टाइप पर GetEnumValues
using System;
public class Demo {
public enum Vehicle { Car, Bus, Bike, Airplane }
public static void Main() {
try {
Vehicle v = Vehicle.Bike;
Type type = v.GetType(); // Vehicle एनम टाइप
// एनम नाम प्राप्त करें
string[] names = type.GetEnumNames();
Console.WriteLine("कॉन्स्टेंट नाम = " + string.Join(", ", names));
// अंडरलाइंग टाइप (डिफ़ॉल्ट int)
Type underlying = type.GetEnumUnderlyingType();
Console.WriteLine("अंडरलाइंग टाइप = " + underlying);
// सभी मान प्राप्त करें
Array values = type.GetEnumValues();
Console.WriteLine("मान ऐरे टाइप = " + values.GetType().Name);
Console.WriteLine("\nकॉन्स्टेंट्स और मान...");
foreach (var name in names) {
object value = Enum.Parse(type, name);
Console.WriteLine("{0} = {1}", name, value);
}
}
catch (ArgumentException e) {
Console.WriteLine("एनम नहीं है! " + e.Message);
}
}
}
आउटपुट
कॉन्स्टेंट नाम = Car, Bus, Bike, Airplane
अंडरलाइंग टाइप = System.Int32
मान ऐरे टाइप = Vehicle[]
कॉन्स्टेंट्स और मान...
Car = 0
Bus = 1
Bike = 2
Airplane = 3
एनम रिफ्लेक्शन मेथड्स सारांश
| मेथड | विवरण | रिटर्न |
|---|---|---|
GetEnumNames() | कॉन्स्टेंट नामों का ऐरे | string[] |
GetEnumValues() | कॉन्स्टेंट मानों का ऐरे | Array |
GetEnumUnderlyingType() | अंडरलाइंग इंटीजर टाइप | Type |
IsEnum | क्या एनम टाइप है? | bool |
GetFields() | फील्ड्स (कॉन्स्टेंट्स + value__) | FieldInfo[] |
एनम मानों को टाइप-सुरक्षित ऐरे के रूप में प्राप्त करना
// जेनेरिक तरीका (.NET Core / .NET 5+)
Vehicle[] vehicles = (Vehicle[])Enum.GetValues(typeof(Vehicle));
// या LINQ के साथ
var vehicleList = Enum.GetValues(typeof(Vehicle)).Cast<Vehicle>().ToList();
// नाम-मान पेयर्स
var nameValuePairs = Enum.GetNames(typeof(Vehicle))
.Zip(Enum.GetValues(typeof(Vehicle)).Cast<int>(), (n, v) => new { Name = n, Value = v });
फ्लैग्स एनम के लिए
[Flags]
public enum FileAccess { None = 0, Read = 1, Write = 2, Execute = 4 }
var combined = FileAccess.Read | FileAccess.Write; // 3
var values = Enum.GetValues(typeof(FileAccess)).Cast<FileAccess>();
// values: None, Read, Write, Execute (कॉम्बिनेशन नहीं)
महत्वपूर्ण नोट्स
GetEnumValues()केवल परिभाषित कॉन्स्टेंट्स लौटाता है, सभी संभावित बिट कॉम्बिनेशंस नहीं।- लौटाया गया ऐरे एनम टाइप का होता है (उदाहरण:
Vehicle[])। - कॉल करने से पहले
type.IsEnumसे जांचें। Enum.GetValues()स्टैटिक मेथड अधिक सुविधाजनक है।