Arraylist перечислить <t>?

117
17

Как я могу преобразовать/выгрузить arraylist в список? Я использую arraylist, потому что я использую функцию профилей ASP.NET, и это выглядело как боль для хранения списка в профилях.


Примечание:
Другой вариант - обернуть список в собственный класс и покончить с ArrayList.


http://www.ipreferjim.com/site/2009/04/storing-generics-in-asp-net-profile-object/

спросил(а) 2010-08-02T22:10:00+04:00 9 лет, 4 месяца назад
4
Решение
58

ArrayList a = new ArrayList();

object[] array = new object[a.Count];

a.CopyTo(array);

List<object> list = new List<object>(array);


В противном случае вам просто нужно сделать цикл над вашим списком arrayList и добавить его в новый список.

ответил(а) 2010-08-02T22:16:00+04:00 9 лет, 4 месяца назад
Еще 3 ответа
155

Самый простой способ конвертировать ArrayList полный объектов типа T будет таким (если вы используете .NET 3.5 или выше):


List<T> list = arrayList.Cast<T>().ToList();

Если вы используете 3.0 или более ранние версии, вам придется зацикливаться:


List<T> list = new List<T>(arrayList.Count);

foreach(T item in arrayList) list.Add(item);

ответил(а) 2010-08-02T22:13:00+04:00 9 лет, 4 месяца назад
77

Вы можете использовать Linq, если используете .NET 3.5 или выше. using System.Linq;


ArrayList arrayList = new ArrayList();
arrayList.Add( 1 );
arrayList.Add( "two" );
arrayList.Add( 3 );

List<int> integers = arrayList.OfType<int>().ToList();

В противном случае вам придется скопировать все значения в новый список.

ответил(а) 2010-08-02T22:15:00+04:00 9 лет, 4 месяца назад
34

Это также работает в Framework < 3.5:


Dim al As New ArrayList()
al.Add(1)
al.Add(2)
al.Add(3)
Dim newList As New List(Of Int32)(al.ToArray(GetType(Int32)))

С#


List<int> newList = new List<int>(al.ToArray(typeof(int)));

ответил(а) 2010-08-02T22:21:00+04:00 9 лет, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема