繁体   English   中英

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

[英]What is the best way to cast from ArrayList to List in .Net 2.0

我有一个类型为BookingDataArrayListList<BookingData>

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

谢谢。

请注意, 事情将不得不枚举数组列表构建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>匹配的中间数组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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM