在.Net 2.0中从ArrayList转换为List的最佳方法是什么

Nig*_*ker 5 c# .net-2.0

我有一个ArrayList类型的BookingDataList<BookingData>

我正在使用.net 2.0所以我不能使用arrayList.Cast<int>().ToList(),我不想在这里做foreach循环,你有更好的想法吗?

谢谢.

Ani*_*Ani 11

做注意到的东西将不得不枚举数组列表构建List<T>; 它只是你自己做或将其留给其他(框架/实用程序)方法的问题.

  1. 如果这是一次性的,您希望避免的解决方案(使用"就地" foreach循环进行转换)是一个非常合理的选择.如果您发现自己经常这样做,您可以将其提取到通用实用程序方法中,如cdhowie的答案.

  2. 如果您的限制仅限于您必须 .NET 2.0为目标(但可以使用C#3),请考虑LINQBridge,它是LINQ to Objects for .NET 2.0的重新实现.这样您就可以使用Cast您提供的样本而无需更改.它也适用于C#2,但是你不会从扩展方法语法,更好的类型推断等方面获益.

  3. 如果你不关心性能,也不想去编写实用程序方法的麻烦,你可以使用内置ArrayList.ToArray方法来帮助,通过创建一个兼容的中间数组List<T>(这不是所有比foreach短的东西):


ArrayList arrayList = ...

// Create intermediary array
BookingData[] array = (BookingData[]) arrayList.ToArray(typeof(BookingData));

// Create the List<T> using the constructor that takes an IEnumerable<T>
List<BookingData> list = new List<BookingData>(array);
Run Code Online (Sandbox Code Playgroud)

最后,我建议,如果可能的话,完全放弃使用过时的非泛型集合类.

  • 仅供参考,此方法将创建一个不必要的中间数组. (2认同)