C# 拳击及;拆箱

C# 拳击及;拆箱,c#,.net,boxing,C#,.net,Boxing,“i”被认为是装箱的吗?C#中的数组是引用类型,因此不需要装箱。但是,在本例中,您将使用拳击: var i = new int[2]; 假设这是C#(var和类似C#的数组语法),不,i没有装箱。只能装箱基本值类型(考虑数值) 数组中的值也没有装箱,因为基本数组中的值不会装箱。不,没有要装箱的内容。var关键字并不意味着变量是boxx。它在运行时不进行任何转换。var关键字严格来说是一个C#构造。使用var时实际发生的情况是: var i = 123; object o = i; IL将其视

“i”被认为是装箱的吗?

C#中的数组是引用类型,因此不需要装箱。但是,在本例中,您将使用拳击:

var i = new int[2];
假设这是C#(
var
和类似C#的数组语法),不,
i
没有装箱。只能装箱基本值类型(考虑数值)


数组中的值也没有装箱,因为基本数组中的值不会装箱。

不,没有要装箱的内容。var关键字并不意味着变量是boxx。它在运行时不进行任何转换。var关键字严格来说是一个C#构造。使用var时实际发生的情况是:

var i = 123;
object o = i;
IL将其视为:

var i = new int[1];
现在,如果您询问,当您将int赋值给i do it框数组的一部分时

例如:

int[] i = new int[1]
不,没有

这与以下情况相反:

i[0] = 2;
这个例子确实如此,而且为什么在1.0、1.1(预泛型)中使用ArrayList(想想可扩展数组)是一个巨大的成本。以下注释也适用于
对象[]
示例:

任何引用或值类型 添加到ArrayList的 向上投射到对象。如果项目是 值类型,则必须在 添加到列表中,并在 它们被找回了。两个演员 以及装箱和拆箱操作 降低性能;影响 装箱和拆箱可能非常复杂 在您 必须迭代大型集合

装箱仅在将(即基元类型、结构或枚举)视为引用类型时发生。数组被声明为保存
int
类型的值。只告诉编译器推断变量
i
的类型,而不是让编译器手动指定它

你有没有写过:

var o = new object[1];

o[0] = 2;
编译器会将其转换为
object[]i=newobject[2]
,并且您在其中输入的任何
int
值都会被装箱。放入同一数组中的任何引用类型都不需要任何装箱

简而言之,
var
与装箱无关


这是一个在.NET中的应用程序。您可能还想阅读。

您可以对任何结构进行装箱,包括您自己编写的结构,因此装箱比这意味着意义更深远。值类型在.NET中作为结构实现。@MarkRushakoff:)我知道这是一篇老文章,但我笑了,实际上洒了一些咖啡:))
var i = new object[2];