![](/img/trans.png)
[英]What is the best way to manage settings (configuration) in ASP.NET 2.0?
[英]What is the best way to cast from ArrayList to List in .Net 2.0
我有一个类型为BookingData
的ArrayList
到List<BookingData>
?
我正在使用.net 2.0所以我不能使用arrayList.Cast<int>().ToList()
,我不想在这里做foreach循环,你有更好的想法吗?
谢谢。
请注意, 事情将不得不枚举数组列表构建List<T>
; 它只是你自己做或将其留给其他(框架/实用程序)方法的问题。
如果这是一次性的,您希望避免的解决方案(使用“就地” foreach
循环进行转换)是一个非常合理的选择。 如果您发现自己经常这样做,您可以将其提取到通用实用程序方法中,如cdhowie的答案。
如果您的限制仅限于您必须以 .NET 2.0为目标 (但可以使用C#3),请考虑LINQBridge ,它是LINQ to Objects for .NET 2.0的重新实现。 这将允许您使用您提供的Cast
样本而无需更改。 它也适用于C#2,但是你不会从扩展方法语法,更好的类型推断等方面获益。
如果您不关心性能,也不想编写实用程序方法的麻烦,可以使用内置的ArrayList.ToArray
方法来帮助创建一个与List<T>
匹配的中间数组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);
最后,我建议,如果可能的话,完全放弃使用过时的非泛型集合类。
让我们保持简单:
// untested
List<T> ConvertArrayList<T>(ArrayList data)
{
List<T> result = new List<T> (data.Count);
foreach (T item in data)
result.Add(item);
return result;
}
...
List<BookingData> newList = ConvertArrayList<BookingData>(oldList);
使用此方法:
public static List<T> ConvertToList<T>(ArrayList list)
{
if (list == null)
throw new ArgumentNullException("list");
List<T> newList = new List<T>(list.Count);
foreach (object obj in list)
newList.Add((T)obj);
// If you really don't want to use foreach:
// for (int i = 0; i < list.Count; i++)
// newList.Add((T)list[i]);
return newList;
}
然后你可以:
List<BookingData> someList = ConvertToList<BookingData>(someArrayList);
你必须使用foreach
:
foreach (Object item in list1)
{
list2.Add((BookingData)item);
}
ToList()方法只是用于创建List表示的Synthetic sugar,但在内部它也使用循环来生成列表项。
因此使用foreach迭代器块更清洁,更简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.