【发布时间】:2011-09-10 20:04:24
【问题描述】:
当我做这个演员时:
private IEnumerable objects;
ArrayList castedObjects = (ArrayList)objects;
这是“直接”转换,还是可枚举通过内部方法(大概循环所有元素)转换为 ArrayList?
【问题讨论】:
标签: c# performance casting arraylist
当我做这个演员时:
private IEnumerable objects;
ArrayList castedObjects = (ArrayList)objects;
这是“直接”转换,还是可枚举通过内部方法(大概循环所有元素)转换为 ArrayList?
【问题讨论】:
标签: c# performance casting arraylist
这要么是“直接”转换(如果底层对象实际上是 ArrayList 的实例),要么你会得到一个 exception。 ArrayList 对象的隐式创建不是在“幕后”完成的。
【讨论】:
这是直接投射。只有当对象已经是 ArrayList 时它才会起作用,例如:
IEnumerable objects = new ArrayList();
ArrayList castedObjects = (ArrayList)objects;
如果对象不是 ArrayList 而是其他实现 IEnumerable 的对象,则转换将失败。
您可以从ICollection 创建一个ArrayList,例如:
ICollection objects = new string[] { "a", "b" };
ArrayList castedObjects = new ArrayList(objects);
这将遍历集合并将项目复制到ArrayList,因此这是一个 O(n) 操作。
一般来说,您根本不应该使用 ArrayList 类,而应该使用提供严格类型的通用 List<T> 类。
【讨论】:
这取决于objects 实际上是什么。它被引用为IEnumerable,但它的实际类型可能是任何实现IEnumerable 的类型。
如果引用可以转换为ArrayList(因为它已经是ArrayList,或者继承自ArrayList),那么它是O(1)。如果它不能,那么你只会得到一个例外。
【讨论】: