代码之家  ›  专栏  ›  技术社区  ›  James Lawruk

如何在不使用foreach的情况下将arraylist转换为强类型泛型列表?

  •  56
  • James Lawruk  · 技术社区  · 15 年前

    请参阅下面的代码示例。我需要 ArrayList 是一个通用列表。我不想用 foreach .

    ArrayList arrayList = GetArrayListOfInts();  
    List<int> intList = new List<int>();  
    
    //Can this foreach be condensed into one line?  
    foreach (int number in arrayList)  
    {  
        intList.Add(number);  
    }  
    return intList;    
    
    4 回复  |  直到 6 年前
        1
  •  109
  •   JaredPar    15 年前

    尝试以下操作

    var list = arrayList.Cast<int>().ToList();
    

    这只在使用C 3.5编译器时有效,因为它利用了3.5框架中定义的某些扩展方法。

        2
  •  10
  •   mqp    15 年前

    这是低效的(它会使中间数组变得不必要),但它很简洁,适用于.NET 2.0:

    List<int> newList = new List<int>(arrayList.ToArray(typeof(int)));
    
        3
  •  4
  •   Will WM    13 年前

    使用扩展方法怎么样?

    http://www.dotnetperls.com/convert-arraylist-list :

    using System;
    using System.Collections;
    using System.Collections.Generic;
    
    static class Extensions
    {
        /// <summary>
        /// Convert ArrayList to List.
        /// </summary>
        public static List<T> ToList<T>(this ArrayList arrayList)
        {
            List<T> list = new List<T>(arrayList.Count);
            foreach (T instance in arrayList)
            {
                list.Add(instance);
            }
            return list;
        }
    }
    
        4
  •  1
  •   Sina Lotfi    6 年前

    在.NET标准2中使用 Cast<T> 更好的方法是:

    ArrayList al = new ArrayList();
    al.AddRange(new[]{"Micheal", "Jack", "Sarah"});
    List<int> list = al.Cast<int>().ToList();
    

    Cast ToList 扩展方法是否在 System.Linq.Enumerable 班级。