首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在UnBoxing中从List到Object的装箱和C#

在UnBoxing中从List到Object的装箱和C#
EN

Stack Overflow用户
提问于 2016-08-10 06:35:26
回答 3查看 2K关注 0票数 3

我想知道我的方法是对还是错?

请参阅这两份声明

案例:#1

代码语言:javascript
复制
List<string> person = new List<string>() {
                            "Harry"
                            "Emma"
                            "Watson"
                        }

案例:#2

代码语言:javascript
复制
Object person = new List<string>() {
                            "Harry"
                            "Emma"
                            "Watson"
                        }

让我知道

哪条语句是装箱,哪条语句是un

这两个语句都是相等和相同的

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-10 06:36:33

他们都不是。装箱和取消装箱是一种在.NET中使用统一类型系统处理值类型的机制。

例如:

代码语言:javascript
复制
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。不能将可空值装箱。

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2016-08-10 06:37:10

没有装箱,因为List是引用类型:

装箱是将值类型转换为类型对象或由此值类型实现的任何接口类型的过程。 取消装箱从对象中提取值类型。装箱是隐式的;取消装箱是显式的。装箱和取消装箱的概念是类型系统的C#统一视图的基础,在这种视图中,任何类型的值都可以被视为对象。

阅读更多:MSDN

这是拳击:

代码语言:javascript
复制
int i = 123;
// The following line boxes i.
object o = i;  

这是解除装箱:

代码语言:javascript
复制
o = 123;
i = (int)o;  // unboxing
票数 3
EN

Stack Overflow用户

发布于 2016-08-10 06:37:51

这不是拳击,也不是取消拳击。

装箱意味着将value type存储到the reference type中,而取消装箱则与boxing相反。

在您的示例中,List和Object都是reference type,.You只使用引用。

代码语言:javascript
复制
int i = 123;
// The following line boxes i.
object o = i;  

o = 123;
i = (int)o;  // unboxing

int -> object boxing

object -> int unboxing

有关更多信息,请参见这里的拳击与反拳击

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38865904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档