将genericsienumerable转换为arraylist
我需要将linq查询从genericsienumerable转换为arraylist。
ArrayList myArrayList = new ArrayList(); var b = (from myObj in myCollection select new myClass { Name = myObj.Name, ac = myObj.ac });
我试过了
b.Cast();
但它不起作用。
编辑:我使用@devdigital解决方案
但我还想指出,同时我找到了一个hackish解决方案。
myArrayList.InsertRange(0, b.ToArray());
ArrayList
类型的构造函数之一采用ICollection
,因此您应该能够执行以下操作:
var b = (from myObj in myCollection select new myClass { Name = myObj.Name, ac = myObj.ac }).ToArray(); ArrayList myArrayList = new ArrayList(b);
我建议你使用List
而不是ArrayList
。 您实际上可以使用ToList
扩展方法或List
的构造函数来获取IEnumerable
:
var myList = b.ToList(); // either var myListTwo = new List(b); // or
List
是.NET 2.0新引入的,是通用的。 这意味着它会在编译时产生实际类型的值,即myClass
,而不是object
。
编辑:如果你确实需要一个ArrayList
,你需要复制b
两次,因为它不能直接处理IEnumerable
,正如devdigital在他的回复中所指出的 :
ArrayList arrayList = new ArrayList(b.ToArray());
您可以使用ToArray()
将IEnumerable
转换为数组,然后从该数组构造一个ArrayList
。
var b = (from myObj in myCollection select new myClass { Name = myObj.Name, ac = myObj.ac }); var myArrayList = new ArrayList(b.ToArray());
ArrayList arrayList = new ArrayList(b.ToList());