See the code sample below. I need the ArrayList
to be a generic List. I don't want to use 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;
Try the following
var list = arrayList.Cast<int>().ToList();
This will only work though using the C# 3.5 compiler because it takes advantage of certain extension methods defined in the 3.5 framework.
This is inefficient (it makes an intermediate array unnecessarily) but is concise and will work on .NET 2.0:
List<int> newList = new List<int>(arrayList.ToArray(typeof(int)));
How about using an extension method?
From 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;
}
}
In .Net standard 2 using Cast<T>
is better way:
ArrayList al = new ArrayList();
al.AddRange(new[]{"Micheal", "Jack", "Sarah"});
List<int> list = al.Cast<int>().ToList();
Cast
and ToList
are extension methods in the System.Linq.Enumerable
class.