当我这样做时:
private IEnumerable objects;
ArrayList castedObjects = (ArrayList)objects;
这是一个“直接”强制转换,还是通过内部方法(可能会遍历所有元素)将枚举转换为ArrayList?
答案 0 :(得分:5)
这是“直接”强制转换(底层对象实际上是ArrayList
的一个实例),或者你将获得exception。在场景后面没有隐式创建ArrayList
对象。
答案 1 :(得分:3)
这是直接演员。它仅在对象已经是ArrayList
时才有效,例如:
IEnumerable objects = new ArrayList();
ArrayList castedObjects = (ArrayList)objects;
如果对象不是ArrayList
,而是实现IEnumerable
的其他对象,则转换将失败。
您可以从ArrayList
创建ICollection
,例如:
ICollection objects = new string[] { "a", "b" };
ArrayList castedObjects = new ArrayList(objects);
这将遍历集合并将项目复制到ArrayList
,因此这是一个O(n)操作。
通常你不应该使用ArrayList
类,而是使用提供严格输入的通用List<T>
类。
答案 2 :(得分:1)
这取决于objects
实际上是什么。它被引用为IEnumerable
,但其实际类型可能是实现IEnumerable
的任何内容。
如果引用可以转换为ArrayList
(因为它已经是,或继承自ArrayList
),那么它就是O(1)。如果它不能,那么你只会得到一个例外。