2013-03-20 27 views
-5

是否有可能,做这样的事情:C#中的ArrayList是否可以包含各种类型的对象?

ArrayList arl = new ArrayList(); 
arl.Add(1); 
arl.Add("test"); 

int[,] tab = new int[4, 4]; 
init(tab); 

arl.Add(tab); 

是否有可能包含不同类型的对象(在JavaScript或Lua语言等)? (C#)

+0

这是否会导致编译错误?'ArrayList'包含对象 – 2013-03-20 09:38:08

+0

尝试运行以查看C#编译器如何反应 – 2013-03-20 09:38:27

+0

您是否尝试过至少一次?我看不出有任何的努力在这里.. – 2013-03-20 09:39:17

回答

1

是,ArrayList包含的对象类型元素,因此,这意味着你可以把一切都在它之前。当再次检索它时,可以将其恢复为原始类型。 当然,由于这种铸造效率较低。

0

是的,它是可能的。 ArrayList存储类型为object的集合,这意味着您可以插入任何.NET类型。

你真的应该使用List<T>。例如:

List<int> listIntegers = new List<int>(); 
listIntegers.Add(1); 

你也可以使用List<object>但是你必须拆箱列表中的所有项目。这可能会导致性能问题。

+2

@Downvoter - 关心评论? – 2013-03-20 10:16:16

+0

这里没有理由downvote,所以是的,为什么downvote? – 2013-03-20 10:18:01

+0

这似乎是一个随机downvoter。我刚刚有两个问题,我问这里downvoted没有特别的原因..:/ – 2013-03-20 10:20:02

0

是的,可以,因为它没有做任何类型检查,它有时比一个List<T>更快参考类型时,虽然一般不推荐,当你有一个完美的罚款类型安全的替代使用它。

object继承的任何类型的可被存储在一个ArrayList。无论何时访问ArrayList中的项目,都必须小心将其转换为正确的类型,否则将发生编译器错误。

我相信ArrayList是从天古老遗迹泛型净

+0

什么? ...你不正确。实际上,当对象退出时,由于运行时类型检查,它会变得更慢。 – 2013-03-20 09:47:28

+1

取决于您在ArrayList中存储的内容,对于引用类型ArrayList实际上更快一些(通过忽略不计的数量来公平),通过将参考类型添加到阵列列表100多万次迭代并确认。另一方面,添加到“列表”明显快于添加到“ArrayList”。 – DGibbs 2013-03-20 09:57:17

+0

我想我读过你的答案错了。我解释它的方式,你是说''ArrayList'总是比'List '执行得更快......这不是你的意思吗? – 2013-03-20 10:21:48

0

至于你的问题,是ArrayList可以包含不同的对象类型。
通常,Microsoft建议使用List<T>代替,以防止在使用相同类型时需要装箱和取消装箱到类型object

如果你有一个类型的循环模式,可能会更有帮助(快)来定义一个自定义类:

protected class arl_items 
{ 
    public string item1 {get; set;}; 
    public int item2 {get; set;}; 
    public int[4,4] item3 {get; set;}; 
} 

,然后去:

List<arl_items> arl = new List<arl_items>(); 

但如果无图案到你的价值类型,你可以如用ArrayList,因为创建List<object>是没有意义的,因为它们是相同的。

只是顺便说一句。我更喜欢使用List<object>过的ArrayList,但这只是我个人的偏好

+0

..也许在这里澄清你的通用'列表'的使用。我会降低你的答案,但我不确定你是否说'ArrayList'和'列表'本质上是相同的(他们是),或者你说要使用'List '而不是'ArrayList '(这是毫无意义的)。 – 2013-03-20 09:46:39

+0

@SimonWhitehead谢谢,我没有意识到我太多的个人喜好混入了答案中 – Vogel612 2013-03-20 10:00:45

0

您可以diffent类型的ArrayList 试试这个:

var ary = new ArrayList(); 

ary.Add("some string"); 
ary.Add(23.4); 
ary.Add(new StringBuilder()); 
ary.Add("some other string"); 

然后,您可以查询它是这样的:

string[] strings = ary.OfType<string>(); 
StringBuilder[] stringBuilders = ary.OfType<StringBuilder>(); 
相关问题