没有什么可以装箱.var关键字并不意味着变量是boxxed.它在运行时没有进行任何转换.var关键字严格来说是C#构造.使用var时实际发生的是:
var i = new int[1];
Run Code Online (Sandbox Code Playgroud)
IL认为它是:
int[] i = new int[1]
Run Code Online (Sandbox Code Playgroud)
现在,如果你问的是,当你为一个数组的一部分分配一个int时,它是否就行了?
如:
i[0] = 2;
Run Code Online (Sandbox Code Playgroud)
不,不是的.
这与以下内容相反:
var o = new object[1];
o[0] = 2;
Run Code Online (Sandbox Code Playgroud)
这个例子确实以及为什么在1.0,1.1(pre generics)中使用ArrayList(想想可扩展数组)是一个巨大的成本.以下注释也适用于该object[]示例:
添加到ArrayList的任何引用或值类型都隐式地向上转换为Object.如果项目是值类型,则在添加到列表时必须将它们装箱,并在检索它们时取消装箱.铸造,装箱和拆箱操作都会降低性能; 在必须迭代大型集合的情况下,装箱和拆箱的效果可能非常显着.
C# 中的数组是引用类型,因此不需要装箱。然而,在此示例中您将进行拳击:
var i = 123;
object o = i;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1510 次 |
| 最近记录: |