2012-12-05 14 views
14

क्या एकाधिक enums को एक साथ जोड़ना संभव है? नीचे मैं देखना चाहेंगे क्या की कोड नमूना है:मास्टर एनम सूची में कई enums को मिलाएं

enum PrimaryColors 
{ 
    Red, 
    Yellow, 
    Blue 
} 

enum SecondaryColors 
{ 
    Orange, 
    Green, 
    Purple 
} 

//Combine them into a new enum somehow to result in: 
enum AllColors 
{ 
    Red, 
    Orange, 
    Yellow, 
    Green, 
    Blue, 
    Purple 
} 

इससे कोई फर्क नहीं पड़ता कि आदेश वे कर रहे हैं, या जो उनके समर्थन नंबर दिए गए हैं, मैं सिर्फ उन्हें गठबंधन करने के लिए सक्षम होना चाहते हैं।

संदर्भ के लिए, ऐसा इसलिए है कि जिस कार्यक्रम पर मैं काम कर रहा हूं, उसके लिए कई कक्षाएं उनके द्वारा किए गए कार्यों से जुड़ी हैं। मेरा मुख्य कार्यक्रम प्रत्येक समर्थन वर्ग से उपलब्ध सभी enums पढ़ेगा और उपलब्ध कमांड के उपलब्ध enums की एक मास्टर सूची (enums के लिए हैं) बनाते हैं।

संपादित करें: इन enums का कारण यह है कि मेरा मुख्य कार्यक्रम कुछ समय पर प्रदर्शन करने के लिए आदेशों की सूची में पढ़ रहा है, और इसलिए मैं फ़ाइल में पढ़ना चाहता हूं, देखें कि इसमें कमांड एक से जुड़ा हुआ है या नहीं मेरे enums के, और यदि यह है, इसे करने के लिए आदेशों की एक सूची में डाल दिया।

+2

'enum' मौलिक एक संकलन समय अवधारणा है। क्या आप एक सी # फ़ाइल तैयार करना चाहते हैं जिसमें 'ऑलकोलर्स' के समान कुछ की परिभाषा है, या आप कुछ और करने की कोशिश कर रहे हैं? – dasblinkenlight

+0

क्या आप संयुक्त प्रकार 'ऑलकोलर्स' प्रोग्रामेटिक रूप से बनाने की कोशिश कर रहे हैं, मेरा मतलब है, जब तक आपका एप्लिकेशन चल रहा न हो तब तक इसे न बनाएं? यदि आप उन्हें एक सूची में जोड़ना चाहते हैं, तो याद रखें कि सभी enums में 'System.Object' और' System.Enum' उनके मूल वर्ग के रूप में हैं। आप उन वर्गों में से किसी एक के आधार पर कुछ सूची बना सकते हैं। आपके enum मूल्य निश्चित रूप से बॉक्स किया जाएगा, लेकिन शायद यह कोई समस्या नहीं है। –

+1

अपने आप को 'enums' क्यों सीमित करें? –

उत्तर

3

सुनिश्चित नहीं है कि मैं ठीक से समझता हूं। लेकिन आप इस तरह से सभी मूल्यों की एक List<> बना सकते हैं:

var allColors = new List<Enum>(); 

allColors.AddRange(Enum.GetValues(typeof(PrimaryColors)).Cast<Enum>()); 
allColors.AddRange(Enum.GetValues(typeof(SecondaryColors)).Cast<Enum>()); 

इसके बजाय List<Enum> की आप भी HashSet<Enum> इस्तेमाल कर सकते हैं। किसी भी मामले में, क्योंकि आप PrimaryColor या SecondaryColor को कक्षा प्रकार (अर्थात् System.Enum) पर निर्दिष्ट करते हैं, तो आपको boxing मिलता है, लेकिन यह केवल तकनीकी विवरण (संभवतः) है।

+0

बीटीडब्ल्यू, 'हैशसेट' सबसे अधिक संभावना प्रदर्शन अनुकूलन के रूप में यहां समझ में नहीं आता है। लेकिन अगर आप इरादे को और स्पष्ट करने के लिए इसका उपयोग कर रहे हैं तो यह समझ में आ सकता है। – svick

+0

यह कोड तब काम नहीं करता जब मैंने कोशिश की। इस पर आधारित एक नमूना कार्यक्रम में, मुझे त्रुटियां मिलीं: 'सिस्टम.कोलेक्शन। जेनरिक.लिस्ट के लिए सबसे अच्छा ओवरलोडेड विधि मिलान .ऑड रेंज (सिस्टम। कोलेक्शन। जेनरिक.आईइनेमरेबल )' में कुछ अमान्य तर्क हैं 'और' तर्क 1: 'System.Collections.Generic.IEnumerable ' to 'System.Collections.Generic.IEnumerable ' ' – Xantham

+0

@Xantham क्षमा करें, मैंने अपना जवाब दोबारा संपादित किया। –

6

इन enums का कारण यह है कि मेरा मुख्य कार्यक्रम कुछ समय पर प्रदर्शन करने के लिए आदेशों की सूची में पढ़ रहा है, और इसलिए मैं फ़ाइल में पढ़ना चाहता हूं, देखें कि इसमें कमांड एक से जुड़ा हुआ है या नहीं मेरे enums, और यदि यह है, इसे करने के लिए आदेशों की एक सूची में डाल दिया।

यह लगता है कि आपके तीन अलग अलग enum प्रकार नहीं करना चाहते हैं, तो आप एक प्रकार (आप क्या कहते हैं "मास्टर enum") के साथ साथ किसी तरह जो उप enums की एक निश्चित मूल्य के अंतर्गत आता है तय करना चाहते हैं। ऐसा करने के लिए, आप अपने मास्टर एनम से मूल्यों का संग्रह या switch का उपयोग कर सकते हैं।

उदाहरण के लिए:

enum Color 
{ 
    Red, 
    Orange, 
    Yellow, 
    Green, 
    Blue, 
    Purple 
} 

bool IsPrimaryColor(Color color) 
{ 
    switch (color) 
    { 
    case Color.Red: 
    case Color.Yellow: 
    case Color.Blue: 
     return true; 
    default: 
     return false; 
    } 
} 

इसके अलावा, you should use a singular name for enum types (जब तक यह एक झंडा enum है)।

1

इसे आसान बनाएं और सिर्फ अंतर्निहित int रूपांतरण का उपयोग, या System.Enum.Parse() समारोह का उपयोग करें:

enum PrimaryColors 
{   
    Red = 0, 
    Yellow = 2, 
    Blue = 4 
} 

enum SecondaryColors 
{ 
    Orange = 1, 
    Green = 3, 
    Purple = 5 
} 

//Combine them into a new enum somehow to result in: 
enum AllColors 
{ 
    Red = 0, 
    Orange, 
    Yellow, 
    Green, 
    Blue, 
    Purple 
} 

class Program 
{ 
    static AllColors ParseColor(Enum color) 
    { 
     return ParseColor(color.ToString()); 
    } 
    static AllColors ParseColor(string color) 
    { 
     return (AllColors)Enum.Parse(typeof(AllColors), color); 
    } 
    static void Main(string[] args) 
    { 
     PrimaryColors color1=PrimaryColors.Red; 
     AllColors result=(AllColors)color1; 
     // AllColors.Red 

     SecondaryColors color2=SecondaryColors.Green; 
     AllColors other=(AllColors)color2; 
     // AllColors.Green 

     AllColors final=ParseColor(PrimaryColors.Yellow); 
     // AllColors.Yellow 
    } 
} 
संबंधित मुद्दे