मैं एक एनम में परिभाषित वस्तुओं की संख्या कैसे प्राप्त कर सकता हूं?
मैं एक एनम में परिभाषित वस्तुओं की संख्या कैसे प्राप्त कर सकता हूं?
जवाबों:
आप स्थैतिक विधि का उपयोग कर सकते हैं, Enum.GetNames
जो एनाम में सभी वस्तुओं के नामों का प्रतिनिधित्व करने वाला एक सरणी देता है। इस एरे की लंबाई संपत्ति एनम में परिभाषित वस्तुओं की संख्या के बराबर होती है
var myEnumMemberCount = Enum.GetNames(typeof(MyEnum)).Length;
प्रश्न है:
मैं एक एनम में परिभाषित वस्तुओं की संख्या कैसे प्राप्त कर सकता हूं?
"आइटम" की संख्या वास्तव में दो पूरी तरह से अलग चीजों का मतलब हो सकता है। निम्नलिखित उदाहरण पर विचार करें।
enum MyEnum
{
A = 1,
B = 2,
C = 1,
D = 3,
E = 2
}
में परिभाषित "आइटम" की संख्या कितनी है MyEnum
?
आइटम 5 की संख्या है? ( A
, B
, C
, D
, E
)
या यह 3 है? ( 1
, 2
, 3
)
(5) में परिभाषित नामों की संख्या की MyEnum
गणना निम्नानुसार की जा सकती है।
var namesCount = Enum.GetNames(typeof(MyEnum)).Length;
(3) में परिभाषित मूल्यों की संख्या MyEnum
निम्नानुसार गणना की जा सकती है।
var valuesCount = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Distinct().Count();
var valuesCount = ((MyEnum[])Enum.GetValues(typeof(MyEnum))).Distinct().Count();
,।
Default = 1, A4 = 1, Portrate = 1, A4Portrait = 1, Landscape = 2, A4Landscape = 2, ...
;)।
Enum.GetValues ( टाइपोफ़ (MyEnum))। लंबाई;
इस प्रश्न के उत्तर में मैंने देखा कि एक निफ्टी ट्रिक, बस एनम में एक अंतिम तत्व जोड़ें और इसका उपयोग यह बताने के लिए करें कि एनम में कितने तत्व हैं:
enum MyType {
Type1,
Type2,
Type3,
NumberOfTypes
}
उस स्थिति में जहां आप 0 के अलावा एक स्टार्ट वैल्यू को परिभाषित कर रहे हैं, आप तत्वों की संख्या का पता लगाने के लिए NumberOfTypes - Type1 का उपयोग कर सकते हैं।
मैं अनिश्चित हूं कि अगर यह विधि Enum का उपयोग करने की तुलना में तेज़ होगी, और मुझे यकीन नहीं है कि क्या यह ऐसा करने का उचित तरीका माना जाएगा, क्योंकि हमारे पास Enum है जो हमारे लिए इस जानकारी का पता लगाता है।
Enum.GetNames का उपयोग आप अपने Enum में IEnumerable मान वापस करने के लिए कर सकते हैं और फिर परिणामी IEnumerable।
GetNames GetValues के समान ही परिणाम देता है, लेकिन तेज़ होता है।
यदि आप खुद को उपरोक्त समाधान लिखते हुए पाते हैं जैसा कि मैं अक्सर करता हूं तो आप इसे सामान्य के रूप में लागू कर सकते हैं:
public static int GetEnumEntries<T>() where T : struct, IConvertible
{
if (!typeof(T).IsEnum)
throw new ArgumentException("T must be an enumerated type");
return Enum.GetNames(typeof(T)).Length;
}
मैं अभी यह देख रहा था, और वर्तमान समाधान की पठनीयता से खुश नहीं था। यदि आप अनौपचारिक रूप से या किसी छोटे प्रोजेक्ट पर कोड लिख रहे हैं, तो आप अपनी लंबाई के अंत में "लंबाई" नामक एक और आइटम जोड़ सकते हैं। इस तरह, आपको केवल टाइप करना होगा:
var namesCount = (int)MyEnum.Length;
बेशक, अगर अन्य आपके कोड का उपयोग करने जा रहे हैं - या मुझे यकीन है कि कई अन्य परिस्थितियों में जो इस मामले में मेरे लिए लागू नहीं हुए हैं - यह समाधान बीमार से भयानक तक कहीं भी हो सकता है।
विजुअल बेसिक के लिए:
[Enum].GetNames(typeof(MyEnum)).Length
मेरे साथ काम नहीं किया, लेकिन
[Enum].GetNames(GetType(Animal_Type)).length
किया।