2010-08-02 22 views
11

मैं एक सरणी सूची को सूची में कैसे परिवर्तित/डंप कर सकता हूं? मैं सरणी सूची का उपयोग कर रहा हूं क्योंकि मैं एएसपी.नेट प्रोफाइल सुविधा का उपयोग कर रहा हूं और यह प्रोफाइल में सूची स्टोर करने के लिए दर्द की तरह दिख रहा था।<t> सूची के लिए Arraylist?

नोट: दूसरा विकल्प सूची को अपनी कक्षा में लपेटना और ArrayList से दूर करना होगा।

List<T> list = arrayList.Cast<T>().ToList(); 

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

http://www.ipreferjim.com/site/2009/04/storing-generics-in-asp-net-profile-object/

+0

संभावित डुप्लिकेट ?] (http://stackoverflow.com/questions/786268/in-net-how-do-you-convert-an-arraylist-to-a-strongly-typed-generic-list-withou) –

उत्तर

24

सबसे आसान तरीका प्रकार T की वस्तुओं का एक ArrayList पूर्ण कन्वर्ट करने के लिए किया जाएगा यह (यह मानते हुए आप .NET 3.5 या अधिक से अधिक उपयोग कर रहे हैं) 3.0 या इससे पहले, आपको अपने आप को लूप करना होगा:

List<T> list = new List<T>(arrayList.Count); 

foreach(T item in arrayList) list.Add(item); 
+1

.NET 3.0 में या इससे पहले आप 'सूची सूची = नई सूची ((टी []) arrayList.ToArray()) का उपयोग कर सकते हैं। । यह .NET में सरणी के covariance पर निर्भर करता है, लेकिन यह कम कुशल है क्योंकि यह डेटा की एक अतिरिक्त प्रति बनाता है। – LBushkin

+0

यदि ArrayList ऑब्जेक्ट प्रकारों का मिश्रण है तो '0T() '' 'कास्ट ()' के बजाय 'ऑफ़ टाइप ()' का उपयोग करें। (.NET 3.5 या इससे अधिक) –

+0

@LBushkin, मैं 'एरे' आधार को वापस करने के लिए 'ToArray' के प्रकार अधिभार का उपयोग किए बिना काम नहीं कर सका। 'नई सूची ((टी []) सरणीस्ट। टोएरे (टाइपोफ (टी)) के साथ पूरे दिन काम करता है)' – Marc

4

यदि आप .NET 3.5 या अधिक का उपयोग कर रहे हैं तो आप लिंक का उपयोग कर सकते हैं। using System.Linq;

ArrayList arrayList = new ArrayList(); 
arrayList.Add(1); 
arrayList.Add("two"); 
arrayList.Add(3); 

List<int> integers = arrayList.OfType<int>().ToList(); 

नहीं तो आप एक नई सूची में सभी मान कॉपी करना होगा।

+0

धन्यवाद: डी एक लाइन रूपांतरण वह था जो मैं –

2
ArrayList a = new ArrayList(); 

object[] array = new object[a.Count]; 

a.CopyTo(array); 

List<object> list = new List<object>(array); 

अन्यथा, आपको बस अपनी सरणी सूची पर एक लूप करना होगा और इसे नई सूची में जोड़ना होगा।

+2

के लिए देख रहा था या इसे एक लाइनर में बदल सकता था, अगर वह 'नई सूची (a.ToArray()) ऑब्जेक्ट चाहता था; ' – Marc

+0

... मुझे थोड़ा लंबा लगता है । – spender

+0

@Marc: वह सूची का उपयोग कर सकता है और अभी भी इसे [सरणी covariance] (http://msdn.microsoft.com/en-us/library/aa664572 (VS.71% 29.aspx) पर भरोसा करके एक ऑनलाइनर रख सकता है सी #: 'नई सूची ((टी []) a.ToArray()); ' – LBushkin

0

इस फ्रेमवर्क < 3.5 भी काम करता है:

Dim al As New ArrayList() 
al.Add(1) 
al.Add(2) 
al.Add(3) 
Dim newList As New List(Of Int32)(al.ToArray(GetType(Int32))) 

सी #

List<int> newList = new List<int>(al.ToArray(typeof(int))); 
एक foreach का उपयोग किए बिना की [नेट में, कैसे आप एक ArrayList एक जोरदार टाइप किया सामान्य सूची में परिवर्तित
संबंधित मुद्दे