我想知道我的方法是对还是错?
请参阅这两份声明
案例:#1
List<string> person = new List<string>() {
"Harry"
"Emma"
"Watson"
}案例:#2
Object person = new List<string>() {
"Harry"
"Emma"
"Watson"
}让我知道
哪条语句是装箱,哪条语句是un?
这两个语句都是相等和相同的?
发布于 2016-08-10 06:36:33
他们都不是。装箱和取消装箱是一种在.NET中使用统一类型系统处理值类型的机制。
例如:
int i = 4;
object o = i; //boxing, int is boxed in an object
int j = (int)o; //unboxing, an int is unboxed from an object来自MSDN

阅读更多关于为什么我们需要拳击和拳击的信息。
在可空类型的装箱中有一个特例。当可为空类型框时,它将框作为其值或null。不能将可空值装箱。
int? a = 4;
object o = a; //boxing, o is a boxed int now
Console.WriteLine(o.GetType()); //System.Int32
int? b = null;
o = b; //boxing, o is null
Console.WriteLine(o.GetType()); // NullReferenceException发布于 2016-08-10 06:37:10
没有装箱,因为List是引用类型:
装箱是将值类型转换为类型对象或由此值类型实现的任何接口类型的过程。 取消装箱从对象中提取值类型。装箱是隐式的;取消装箱是显式的。装箱和取消装箱的概念是类型系统的C#统一视图的基础,在这种视图中,任何类型的值都可以被视为对象。
阅读更多:MSDN
这是拳击:
int i = 123;
// The following line boxes i.
object o = i; 这是解除装箱:
o = 123;
i = (int)o; // unboxing发布于 2016-08-10 06:37:51
这不是拳击,也不是取消拳击。
装箱意味着将value type存储到the reference type中,而取消装箱则与boxing相反。
在您的示例中,List和Object都是reference type,.You只使用引用。
int i = 123;
// The following line boxes i.
object o = i;
o = 123;
i = (int)o; // unboxing
int -> object boxing
object -> int unboxing有关更多信息,请参见这里的拳击与反拳击
https://stackoverflow.com/questions/38865904
复制相似问题