将泛型ienumerable转换为arraylist

时间:2012-02-14 12:14:58

标签: c# generics

我需要将linq查询从泛型ienumerable转换为arraylist。

ArrayList myArrayList = new ArrayList();
         var b =
              (from myObj in myCollection
           select new myClass
           {
            Name = myObj.Name,
            ac = myObj.ac
           });

我尝试过做

b.Cast<ArrayList>();

但它不起作用。

已编辑: 我使用@devdigital解决方案

但我也想指出,同时我找到了一个黑客的解决方案。

myArrayList.InsertRange(0, b.ToArray());

4 个答案:

答案 0 :(得分:15)

ArrayList类型的构造函数之一需要ICollection,因此您应该能够执行以下操作:

var b =
    (from myObj in myCollection
     select new myClass
    {
      Name = myObj.Name,
      ac = myObj.ac
    }).ToArray();

ArrayList myArrayList = new ArrayList(b);

答案 1 :(得分:4)

我建议你使用List<T>而不是ArrayList。您实际上可以使用ToList扩展方法或List的{​​{3}}:

var myList = b.ToList(); // either
var myListTwo = new List<myClass>(b); // or

List<T>是.NET 2.0新引入的,并且是通用的。这意味着它会在编译时产生实际类型的值,即myClass,而不是object

修改:如果您确实需要ArrayList,则需要复制b两次,因为它无法直接处理IEnumerable,因为{{3 }}:

ArrayList arrayList = new ArrayList(b.ToArray());

答案 2 :(得分:2)

您可以将IEnumerable转换为包含ToArray()的数组,然后从该数组中构建ArrayList

var b = (from myObj in myCollection
         select new myClass
         {
             Name = myObj.Name,
             ac = myObj.ac
         });
var myArrayList = new ArrayList(b.ToArray());

答案 3 :(得分:0)

ArrayList arrayList = new ArrayList(b.ToList());