问题
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;
回答1:
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.
回答2:
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)));
回答3:
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;
}
}
回答4:
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();
CastandToListare extension methods in theSystem.Linq.Enumerableclass.
来源:https://stackoverflow.com/questions/786268/how-to-convert-an-arraylist-to-a-strongly-typed-generic-list-without-using-a-for