当我将Object类型保留到集合时,泛型是否会进行装箱/取消装箱

时间:2014-03-26 09:09:09

标签: c#

如果我有一个列表中包含Object的列表:

List<object> t = new List<object>();
t.Add(10);
t.Add("xyx");

在这种情况下,如果我取回列表项,是否需要将它们取消包装?

4 个答案:

答案 0 :(得分:4)

如果您使用了一个对象来保存值类型,则只会出现“取消装箱”。

在您的示例中,t.Add(10);确实将int值类型装入对象,因此在访问它时必须将其取消装箱。

但是,t.Add("xyx");正在添加字符串引用类型,因此它不会被装箱,并且在您访问它时不需要取消装箱。

但是,在这两种情况下,您必须值转换为正确的类型才能以该类型访问它。

答案 1 :(得分:3)

如果您需要将它们视为特定类型的对象,是的。

var o = t[0]; //this is object
var i = (int)t[0]; //this is int

答案 2 :(得分:2)

这取决于。如果您想将其用作特定类型,那么是。否则,您可以将它们用作对象。

答案 3 :(得分:1)

是的,您必须将它们拆箱到特定类型。