2009-04-24 3 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のが唯一の予想タイプが含まれていることを確認していない場合には、それらを().ToListを()arrayList.OfTypeフィルタ。 http://stackoverflow.com/a/7845009/52277 –

答えて

102

それは3.5フレームワークで定義された特定の拡張メソッドを利用しますので、これが唯一のC#3.5コンパイラを使用しても動作します以下

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

を試してみてください。

+0

を参照してください私は確かに自分の前にこれを使用している間、私はボクシング/ unboxingを検討しています。パフォーマンスから後退しないだろうか?時には、私はかなりのコードが速度とリソースを犠牲にしていることがわかります... –

+6

これは、最初の場所でArrayListに配置することの単なる結果です。すべてのメンバをintにキャストするだけで、パフォーマンス面では最高です。 – mquander

+0

@mquander、true、true ...私はちょうどOPのポストのfor-loopもそうであることに気づいた。 =) –

9

これは非効率的である(それは不必要に中間配列になります)が、簡潔で、.NET 2.0で動作します:拡張メソッドを使用する方法について

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

なぜこれは私のために働いていないのですか? –

+5

私は 'arrayList.ToArray(typeof(int))をint []'として実行しました。 +1 –

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; 
    } 
}