我是来自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
答案 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有任何不是MyType的条目,那么您将获得InvalidCastException。
您必须包含System.Linq命名空间。