2011-06-08 79 views

回答

5

这是一个“直接”投射(如果底层对象实际上是ArrayList的一个实例),或者您将得到一个exception。 “隐藏在场景后面”并不隐式创建对象。

1

这取决于objects究竟是什么。它被引用为IEnumerable,但其实际类型可能是实现IEnumerable的任何内容。

如果引用可以转换为ArrayList(因为它已经是或继承自ArrayList),那么它就是O(1)。如果它不能,那么你会得到一个异常。

3

这是直接演员。如果对象是一个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>类,提供严格类型。

+0

至于使用列表你是对的,但我使用第三方库,大量使用ArrayLists,我被迫在这里和那里投。 – vulkanino 2011-06-08 13:02:52

+0

这个第三方库没有别的选择吗?在现代应用中使用.NET 1.1方法会导致你痛苦。 – Carson63000 2011-06-08 13:32:42

相关问题