当我做此铸:正在将IEnumerable强制转换为ArrayList O(N)或O(1)?
private IEnumerable objects;
ArrayList castedObjects = (ArrayList)objects;
这是“直接”浇铸,或可枚举经由内部方法转化成一个ArrayList(即推测是通过所有的元素循环)?
当我做此铸:正在将IEnumerable强制转换为ArrayList O(N)或O(1)?
private IEnumerable objects;
ArrayList castedObjects = (ArrayList)objects;
这是“直接”浇铸,或可枚举经由内部方法转化成一个ArrayList(即推测是通过所有的元素循环)?
这是一个“直接”投射(如果底层对象实际上是ArrayList
的一个实例),或者您将得到一个exception。 “隐藏在场景后面”并不隐式创建对象。
这取决于objects
究竟是什么。它被引用为IEnumerable
,但其实际类型可能是实现IEnumerable
的任何内容。
如果引用可以转换为ArrayList
(因为它已经是或继承自ArrayList
),那么它就是O(1)。如果它不能,那么你会得到一个异常。
这是直接演员。如果对象是一个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>
类,提供严格类型。
至于使用列表你是对的,但我使用第三方库,大量使用ArrayLists,我被迫在这里和那里投。 –
vulkanino
2011-06-08 13:02:52
这个第三方库没有别的选择吗?在现代应用中使用.NET 1.1方法会导致你痛苦。 – Carson63000 2011-06-08 13:32:42