.NET 2.0 में कास्ट लिस्ट <int> से लिस्ट <string> पर जाएं


97

क्या आप किसी List<int>को एक कास्ट कर सकते हैं List<string>?

मुझे पता है कि मैं और .Toring () के माध्यम से लूप कर सकता हूं, लेकिन एक कास्ट कमाल होगा।

मैं C # 2.0 में हूं (इसलिए कोई LINQ नहीं )।

जवाबों:


151

.NET 2.0 में वह ConvertAllविधि है जहां आप एक कनवर्टर फ़ंक्शन में पास कर सकते हैं:

List<int>    l1 = new List<int>(new int[] { 1, 2, 3 } );
List<string> l2 = l1.ConvertAll<string>(delegate(int i) { return i.ToString(); });

117

2010 के लिए अद्यतन किया गया

List<int> l1 = new List<int>(new int[] { 1,2,3 } );
List<string> l2 = l1.ConvertAll<string>(x => x.ToString());

6
धन्यवाद! इसने मुझे एक टन समय बचा लिया
स्टीव फ्रेंच

2
नहीं, लैम्ब्डा को C # 3.0 में पेश किया गया था इसलिए यह 2.0 में काम नहीं करेगा।
ल्यूक

मैंने पाया कि यह VS2008 और .NET 2.0 के साथ काम करता है, जब तक आपके पास कम से कम .NET 3.0 स्थापित है। देखें stackoverflow.com/questions/3341846/…
igelineau

1
लोगों को .NET संस्करण और C # संस्करण के बीच अंतर करना चाहिए। चूंकि तीर x => x.ToString()एक ही तरह के आईएल के लिए संकलित किया गया है delegate(int x) { return x.ToString(); }, इस मामले में महत्वपूर्ण बात यह है कि एक सी # कंपाइलर (सी # संस्करण) है जो जानता है कि क्या =>है। फ्रेमवर्क और रनटाइम (.NET संस्करण) को इसके लिए कोई विशेष सुविधाओं की आवश्यकता नहीं है, इसलिए .NET 2.0 यहां ठीक है।
जेपी स्टिग नीलसन

पता चला है कि आप खाई कर सकते हैं <string>और यह अभी भी काम करता है। इसे सिर्फ बनानाl1.ConvertAll(x => x.ToString());
। '

8

C # 2.0 करने में सक्षम है List<T>.Convert? यदि ऐसा है, तो मुझे लगता है कि आपका सबसे अच्छा अनुमान एक प्रतिनिधि के साथ उपयोग करना होगा:

List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Convert(delegate (int i) { return i.ToString(); });

उन पंक्तियों के साथ कुछ।


ग्लेन का उत्तर अपवोट करें, जो शायद सही कोड है ;-)


6

आप उपयोग कर सकते हैं:

List<int> items = new List<int>(new int[] { 1,2,3 } );
List<string> s = (from i in items select i.ToString()).ToList();

5

आप में सक्षम करने के लिए इसे सीधे डाली के रूप में कोई स्पष्ट या अस्पष्ट डाली स्ट्रिंग के लिए पूर्णांक से मौजूद नहीं हो सकता है, यह होता है .ToString () जैसे शामिल विधि के लिए: -

foreach (int i in intList) stringList.Add(i.ToString());

संपादित करें - या जैसा कि अन्य लोगों ने शानदार ढंग से बताया है, intList.ConvertAll (प्रतिनिधि (int i) {return i.ToString ();}) का उपयोग करें ;, हालांकि स्पष्ट रूप से आपको अभी भी उपयोग करना है। TString () और यह रूपांतरण के बजाय है। अभिनेता का चयन।


3
जेनेरिक प्रकारों के बीच कलाकारों के अस्तित्व का प्रक्षेपण के बीच कास्ट करने की क्षमता से कोई लेना-देना नहीं है। IE, भले ही intस्पष्ट रूप से या स्पष्ट रूप से परिवर्तनीय थे string, इसका मतलब यह नहीं है कि List<int>इसका एक अंतर्निहित या स्पष्ट रूपांतरण है List<string>
एडम रॉबिन्सन

1

आपको एक नई सूची बनानी होगी। अंतर्निहित बिट अभ्यावेदन List<int>और List<string>पूरी तरह से असंगत हैं - 64-बिट प्लेटफ़ॉर्म पर, उदाहरण के लिए, व्यक्तिगत सदस्य समान आकार नहीं हैं।

यह एक के List<string>रूप में इलाज करना सैद्धांतिक रूप से संभव है List<object>- यह आपको सह-अस्तित्व और विरोधाभासी की रोमांचक दुनिया में ले जाता है, और वर्तमान में C # या VB.NET द्वारा समर्थित नहीं है।


@ कर्ट :> यह सैद्धांतिक रूप से संभव है कि एक सूची <string> एक सूची के रूप में <ऑब्जेक्ट> -> यह आपको रोमांचक दुनिया में> सहवास और विरोधाभासी के रूप में मिलता है, और> वर्तमान में C # या> BB द्वारा समर्थित नहीं है। NET C # और .NET वास्तव में Covariance का समर्थन करता है। सिर्फ जेनरिक के साथ नहीं।
क्रिश्चियन हैगलाइड

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.