我需要将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());
答案 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());