2009-04-24 100 views
52

請參閱下面的代碼示例。我需要ArrayList是一個通用的列表。在.Net中,如何在不使用foreach的情況下將ArrayList轉換爲強類型的泛型列表?

ArrayList arrayList = GetArrayListOfInts(); 
List<int> intList = new List<int>(); 

//Can this foreach be condensed into one line? 
foreach (int number in arrayList) 
{ 
    intList.Add(number); 
} 
return intList;  
+0

如果你是不知道,ArrayList中只包含預期的類型,它們進行過濾arrayList.OfType ().ToList()。看到http://stackoverflow.com/a/7845009/52277 – 2013-05-16 21:39:47

回答

102

請嘗試以下

var list = arrayList.Cast<int>().ToList(); 

這隻會但因爲它利用了在3.5框架中定義的某些擴展方法使用C#編譯器3.5工作。

+0

雖然我已經明確地使用過這個,但我正在考慮裝箱/取消裝箱。這不會從表現中收回嗎?有時我發現漂亮的代碼是以犧牲速度和資源爲代價的...... – 2009-04-24 15:15:22

+6

這只是將它放在ArrayList中的一個結果。只要將每個成員都轉換回int,就可以在性能方面做到最好。 – mquander 2009-04-24 15:17:11

9

這是低效的(它使一箇中間陣列不必要地),但是簡潔和.NET 2.0將工作:

List<int> newList = new List<int>(arrayList.ToArray(typeof(int))); 
4

如何使用一個擴展方法?

http://www.dotnetperls.com/convert-arraylist-list

using System; 
using System.Collections; 
using System.Collections.Generic; 

static class Extensions 
{ 
    /// <summary> 
    /// Convert ArrayList to List. 
    /// </summary> 
    public static List<T> ToList<T>(this ArrayList arrayList) 
    { 
     List<T> list = new List<T>(arrayList.Count); 
     foreach (T instance in arrayList) 
     { 
      list.Add(instance); 
     } 
     return list; 
    } 
} 
相關問題