我该如何将ArrayList转换/导出为List?我使用ArrayList是因为我正在使用ASP.NET的配置文件功能,而在配置文件中存储List看起来很麻烦。
注意: 另一种选择是将List封装到自己的类中,并且不再使用ArrayList。
http://www.ipreferjim.com/site/2009/04/storing-generics-in-asp-net-profile-object/
我该如何将ArrayList转换/导出为List?我使用ArrayList是因为我正在使用ASP.NET的配置文件功能,而在配置文件中存储List看起来很麻烦。
注意: 另一种选择是将List封装到自己的类中,并且不再使用ArrayList。
http://www.ipreferjim.com/site/2009/04/storing-generics-in-asp-net-profile-object/
如果您使用的是 .NET 3.5 或更高版本,将一个由类型为 T
的对象填充的 ArrayList
转换的最简单方法如下:
List<T> list = arrayList.Cast<T>().ToList();
List<T> list = new List<T>(arrayList.Count);
foreach(T item in arrayList) list.Add(item);
List<T> list = new List<T>( (T[])arrayList.ToArray() )
。这依赖于 .NET 中数组的协变性,但效率较低,因为它会创建数据的额外副本。 - LBushkinOfType<T>()
而不是Cast<T>()
。(.NET 3.5或更高版本) - Jerod HoughtellingToArray
的类型重载返回一个基类Array
,我无法让它正常工作。使用new List<T>((T[])arrayList.ToArray(typeof(T)))
整天都可以正常工作。 - MarcList<T>
使用该初始容量进行初始化,防止在填充过程中可能需要扩展。 - Adam Robinsonstring[]
转换为object[]
,但反过来不行。这很有道理,因为从string
到object
有一个转换,但从object
到string
则不可能。在编译时,编译器无法确定object[]
是否真的会成为string[]
,因此它允许强制转换,但在运行时,它当然会失败。运行时不能让我们将string
放入object[]
中。执行此转换的正确方法需要使用带有Type
参数的重载。对于我的误导,我感到抱歉。 - LBushkin如果您使用的是.NET 3.5或更高版本,则可以使用Linq。 using System.Linq;
ArrayList arrayList = new ArrayList();
arrayList.Add( 1 );
arrayList.Add( "two" );
arrayList.Add( 3 );
List<int> integers = arrayList.OfType<int>().ToList();
ArrayList a = new ArrayList();
object[] array = new object[a.Count];
a.CopyTo(array);
List<object> list = new List<object>(array);
new List<object>(a.ToArray());
,可以将其转换为一行代码。 - Marc这在 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)))
C#
List<int> newList = new List<int>(al.ToArray(typeof(int)));