web-dev-qa-db-ja.com

foreachを使用せずにArrayListを厳密に型指定されたジェネリックリストに変換する方法は?

以下のコードサンプルを参照してください。 ArrayListが汎用リストである必要があります。 foreachを使いたくありません。

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;    
56
James Lawruk

以下をお試しください

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

これは、C#3.5コンパイラを使用する場合にのみ機能します。これは、3.5フレームワークで定義されている特定の拡張メソッドを利用するためです。

111
JaredPar

これは非効率的です(中間配列を不必要に作成します)が、簡潔であり、.NET 2.0で動作します。

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

拡張メソッドを使用してはどうですか?

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;
    }
}
4
Will WM

.Net標準2では、Cast<T>を使用する方が良い方法です。

ArrayList al = new ArrayList();
al.AddRange(new[]{"Micheal", "Jack", "Sarah"});
List<int> list = al.Cast<int>().ToList();

CastおよびToListは、System.Linq.Enumerableクラスの拡張メソッドです。

1
Sina Lotfi