2009-11-12 12 views
8

का उपयोग करने का प्रयास कर रहा हूं हाय मैं 1 सूची को दूसरे में जोड़ने की कोशिश कर रहा हूं। मैं इसे पहले AddRange() का उपयोग कर, लेकिन यह यहाँ काम किया जाना प्रतीत नहीं होता है किया है ... कोड यह रहा:सी # में एक सूची को दूसरे में शामिल नहीं कर सकता ... AddRange

IList<E> resultCollection = ((IRepository<E, C>)this).SelectAll(columnName, maxId - startId + 1, startId);     
IList<E> resultCollection2 = ((IRepository<E, C>)this).SelectAll(columnName, endId - minId + 1, minId); 
resultCollection.ToList().AddRange(resultCollection2); 

मैं परिणामों की जांच करने के लिए डिबगिंग किया था, यहाँ मैं क्या मिला है: resultCollection की गणना 4 resultCollection2 की संख्या 6 है, और सीमा जोड़ने के बाद, resultCollection अभी भी 4 की गिनती है, जब इसकी संख्या 10 होनी चाहिए।

क्या कोई देख सकता है कि मैं क्या गलत कर रहा हूं? किसी भी मदद की सराहना की है।

धन्यवाद,
मैट

उत्तर

31

जब आप फोन ToList() आप एक List<T> में संग्रह लपेटकर नहीं कर रहे हैं आप एक नया List<T> उस में एक ही आइटम के साथ बना रहे हैं। तो आप यहां प्रभावी ढंग से क्या कर रहे हैं एक नई सूची बना रहा है, इसमें आइटम जोड़ रहा है, और फिर सूची को फेंक रहा है।

आप की तरह कुछ करने के लिए आवश्यकता होगी: यदि आप सी # 3.0 का उपयोग कर रहे, वैकल्पिक रूप से

List<E> merged = new List<E>(); 
merged.AddRange(resultCollection); 
merged.AddRange(resultCollection2); 

, बस का उपयोग Concat, उदा

resultCollection.Concat(resultCollection2); // and optionally .ToList() 
+0

बहुत बढ़िया, पूरी तरह से काम किया, धन्यवाद! – Matt

4

मैं .ToList() एक नया संग्रह पैदा कर रही है ग्रहण करेंगे। इसलिए आपके आइटम को एक नए संग्रह में जोड़ा जा रहा है जिसे तुरंत फेंक दिया जाता है और मूल अवशेष छूटे रहते हैं।

+0

मैं बनाने का प्रयास करें यदि यह एक नई सूची में लौट आए हो इसे कहते हैं। "अंतर्निहित रूप से 'void' को 'System.Collection.Generic.List ' में परिवर्तित नहीं कर सकता है, तो मेरा अनुमान है कि यह कुछ भी वापस नहीं कर रहा है? – Matt

+0

मैंने वही गलती की! AddRange शून्य शून्य देता है। –

+1

ग्रेग बीच द्वारा प्रदान किए गए समाधान का उपयोग करें। इसके अलावा, अगर मेरे बजाय उसके लिए जाना स्वीकार कर रहा है, तो मैंने केवल समस्या की ओर इशारा किया है, उसने ऐसा किया है और साथ ही एक समाधान प्रदान किया है! :) – Quibblesome

1

resultCollection.ToList() एक नई सूची लौटाएगा।

प्रयास करें:।

List<E> list = resultCollection.ToList(); 
list.AddRange(resultCollection2); 
+0

'AddRange' रिटर्न शून्य। –

+0

अच्छी तरह से देखा ... तय। –

1

IList newList = resultCollection.ToList प्रयास करें() AddRange (resultCollection2);

List<E> newList = resultCollection.ToList(); 
newList.AddRange(resultCollection2); 
0

आप में से किसी का उपयोग कर सकते हैं:

List<E> list = resultCollection as List<E>; 
if (list == null) 
    list = new List<E>(resultCollection); 
list.AddRange(resultCollection2); 

या:

// Edit: this one could be done with LINQ, but there's no reason to limit 
//  yourself to .NET 3.5 when this is just as short. 
List<E> list = new List<E>(resultCollection); 
list.AddRange(resultCollection2); 

या:

List<E> list = new List<E>(resultCollection.Concat(resultCollection2));