如何将ArrayList转换为ArrayList <mytype> </mytype>

时间:2014-04-03 20:32:07

标签: c# .net generics arraylist casting

我是来自Java的.net的新手。一行代码我返回ArrayList,但我知道所有元素都是MyType。如何轻松地转换为模板ArrayList?重申一下,我有

ArrayList arr = getArrayList();

我想要

ArrayList<MyType> arr = getArrayList();

我尝试了ArrayList<MyType> arr = getArrayList() as ArrayList<MyType>,但它说Class 'System.Collections.ArrayList' does not have type parameters

3 个答案:

答案 0 :(得分:6)

.Net中没有通用的ArrayList类型(这是Java的东西)。在.Net中,您需要使用List<T>代替。此外,您无法进行转换以进行转换。你需要这样做:

List<MyType> arr = getArrayList().Cast<MyType>().ToList();

虽然我们正在研究它,但你应该检查一下你是否真的需要一个List,或者普通IEnumerable<MyType>是否足够好:

IEnumerable<MyType> arr = getArrayList().Cast<MyType>();

var arr = getArrayList().Cast<MyType>();

答案 1 :(得分:1)

我们在C#中有List<T>课,这可能就是您要找的内容。

List<MyType> arr = new List<MyType>();

ArrayList不是通用集合,它不是强类型的。如果您确定getArrayList()返回的集合只包含MyType类型的项目或某种类型的项目可以转换为MyType,您可以使用Enumerable.Cast方法,否则使用OfType方法来阻止InvalidCastException

List<MyType> arr = getArrayList().OfType<MyType>().ToList();

答案 2 :(得分:0)

你可以这样做:

ArrayList yourList;

List<MyType> list = yourList.Cast<MyType>().ToList();

如果您的ArrayList有任何不是M​​yType的条目,那么您将获得InvalidCastException。

您必须包含System.Linq命名空间。