请参阅下面的代码示例。我需要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;
答案 0 :(得分:111)
尝试以下
var list = arrayList.Cast<int>().ToList();
这只能使用C#3.5编译器,因为它利用了3.5框架中定义的某些扩展方法。
答案 1 :(得分:10)
这是低效的(它不必要地制作一个中间数组)但是简洁并且可以在.NET 2.0上运行:
List<int> newList = new List<int>(arrayList.ToArray(typeof(int)));
答案 2 :(得分: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;
}
}
答案 3 :(得分:1)
在.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
类中的扩展方法。