См. Пример кода ниже. Мне нужно, чтобы ArrayList был общим списком. Я не хочу использовать foreach.
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>:
Cast<T>
ArrayList al = new ArrayList(); al.AddRange(new[]{"Micheal", "Jack", "Sarah"}); List<int> list = al.Cast<int>().ToList();
Cast и ToList являются методами расширения в классе System.Linq.Enumerable.
Cast
ToList
System.Linq.Enumerable