以下のコードサンプルを参照してください。 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;
以下をお試しください
var list = arrayList.Cast<int>().ToList();
これは、C#3.5コンパイラを使用する場合にのみ機能します。これは、3.5フレームワークで定義されている特定の拡張メソッドを利用するためです。
これは非効率的です(中間配列を不必要に作成します)が、簡潔であり、.NET 2.0で動作します。
List<int> newList = new List<int>(arrayList.ToArray(typeof(int)));
拡張メソッドを使用してはどうですか?
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;
}
}
.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
クラスの拡張メソッドです。