2016-12-05 8 views
7

मेरे पास दो समान enums हैं जिनके सदस्यों के समान नाम हैं, लेकिन वे अलग-अलग नामस्थानों में हैं, इसलिए वे "विभिन्न प्रकार" हैं, लेकिन वास्तव में नामस्थान 1.enum1 {a, b, c, डी, ई, एफ} और नेमस्पेस 2.enum2 {ए, बी, सी, डी, ई, एफ}फास्ट आईनेमेरेबल <enum1> सूची <enum2> कन्वर्टेशन

IEnumerable<enum1> से List<enum2> को लूप का उपयोग किये बिना परिवर्तित करने का सबसे आसान तरीका कैसा है?

+2

लूप के बिना ऐसा करने का एक * सुरक्षित * तरीका नहीं है, लेकिन यदि आप 'असुरक्षित' कोड का उपयोग करने में सक्षम हैं, तो आप सीधे एक कलाकार के माध्यम से स्मृति को ट्रांसमिट कर सकते हैं। इसके परिणामस्वरूप अमान्य स्मृति हो सकती है, अगर enums के पास अलग-अलग मेमोरी लेआउट हैं, हालांकि। – Kroltan

उत्तर

14

अच्छी तरह से कुछ लूप कहीं पर जा रहा है, लेकिन यह आपके कोड में होना आवश्यक नहीं है। बस एक LINQ Select ठीक हो जाएगा:

var result = original.Select(x => (Enum2) x).ToList(); 
+0

यदि यह '=> (Enum2) (int) x' जैसा किया जाता है तो क्या कलाकार अभी भी काम करेगा? क्या यह आवश्यक नहीं है? – Nkosi

+0

@Nkosi: हाँ, लेकिन आपको इसकी आवश्यकता नहीं है। –

+0

ठीक समझा। धन्यवाद – Nkosi

3

या आप Cast (अभी भी हे (एन) :-))

var result = original.Cast<int>().Cast<Enum2>().ToList(); 

चेतावनी का उपयोग कर सकते ऐसा लगता है कि यह हमेशा के रूप में काम नहीं करेगा अपेक्षित (InvalidCastException कुछ मामलों में फेंक दिया जा सकता है)। क्यों पता लगाने के लिए टिप्पणियां देखें।

+0

वास्तव में कुछ मामलों में एक अपवाद फेंक देगा जो 'कास्ट' बनाता है। विचित्र, लेकिन सच है। इसके बारे में कहीं और पोस्ट है - इसे खोदने की कोशिश करेंगे। –

+0

देखें http://stackoverflow.com/questions/40604183/ ('int' /' uint' 'int'/enum 'जैसा है। –

+1

@ जोनस्केट यदि दोनों enums के लिए अंतर्निहित प्रकार समान है तो वह अभी भी होगा यहाँ एक मुद्दा है? हालांकि मुक्केबाजी की वजह से यह शायद इससे बचने लायक है। – juharr

संबंधित मुद्दे