问题标签 [unboxing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 将一个结构数组分配给另一个相同结构的数组
在 Vb.net 中,我试图将一个结构数组分配给另一个相同结构的数组
ifo 中的任何更改都会反映在 info2 中,此分配网络是由参考发生的。
我不希望信息的任何更改反映在 info2 中,反之亦然,在分配之后,我该如何实现?
java - Android上的装箱和拆箱
我正在开发一个 Android 应用程序。
我有以下界面:
对于在 上定义的每个表enum Table
,它将是一个表示该表的对象。
我的问题是关于参数Object item
。每次调用其中一种方法时,我都必须对每个项目进行拆箱,而且我不知道这对于 Android 是否会非常慢。
你知道更好的解决方案吗?我不想为每个表创建一个 DBAdapter,因为我应该在彼此之间共享 SQLiteDatabase 对象。
更新:
这是我需要传递给这些方法的对象示例:
谢谢。
c# - 为什么拆箱枚举会产生奇怪的结果?
考虑以下::
2件事::
- 为什么我可以拆箱
StringComparison
?我想这是因为它的底层类型是Int32
,但我仍然觉得它很奇怪。 - 为什么
nullableEnum
会有 null 值?
据我了解,唯一有效的拆箱是从装箱值类型到它的类型或可空类型。如果int
可以取消装箱到Enum
,那么为什么对于可空值不适用呢?同样,如果不是 5 I boxed StringComparison.OrdinalIgnoreCase
,那nullableInt
将是 null,但nullableEnum
不会。
c# - 将 ValueType 声明为类的一部分时是否会被装箱?
考虑到这个类:
我猜“MyField”成员不在线程堆栈上,因为它可以被多个线程访问,它必须肯定在托管堆中,但这是否意味着它每次使用时都被装箱和拆箱?
提前致谢
c# - 使用泛型装箱和拆箱
.NET 1.0 创建整数集合的方式(例如)是:
使用它的代价是由于装箱和拆箱而缺乏类型安全性和性能。
.NET 2.0 的方式是使用泛型:
装箱的代价(据我所知)是需要在堆上创建一个对象,将堆栈分配的整数复制到新对象,反之亦然。
泛型的使用如何克服这个问题?堆栈分配的整数是否保留在堆栈上并从堆中指向(我猜不是这种情况,因为当它超出范围时会发生什么)?似乎仍然需要将它复制到堆栈之外的其他地方。
到底发生了什么?
.net - 枚举如何从 System.Enum 派生并且同时是整数?
编辑:底部的评论。另外,这.
这就是让我感到困惑的地方。我的理解是,如果我有这样的枚举......
...我基本上所做的是定义了一个用两个定义的值调用的值类型,并且. 此类型派生自引用类型(值类型通常不能做的事情——至少在 C# 中是不允许的——但在这种情况下是允许的),并且具有来回转换到值/从值转换的功能。Animal
Dog
Cat
System.Enum
int
如果我刚才描述的枚举类型是真的,那么我希望下面的代码会抛出一个InvalidCastException
:
通常,您不能将值类型从System.Object
它的确切类型以外的任何东西拆箱。那么以上怎么可能呢?就好像该Animal
类型同时是一个int
(不仅仅是可转换为int
)并且是(Enum
不仅仅是可转换为Enum
)。是多重继承吗?是否System.Enum
以某种方式继承自System.Int32
(我没想到会发生的事情)?
编辑:它不能是上述任何一个。以下代码最终证明了这一点(我认为):
上述输出:
MSDN 关于枚举的文档和 C# 规范都使用了术语“底层类型”;但我不知道这是什么意思,我也从未听说过它用于指代枚举以外的任何东西。“基础类型”实际上是什么意思?
那么,这是否是另一个从 CLR 获得特殊处理的案例?
我的钱是在这种情况下......但答案/解释会很好。
更新:Damien_The_Unbeliever提供了真正回答这个问题的参考。可以在 CLI 规范的第 II 部分中的枚举部分中找到解释:
出于绑定目的(例如,从用于调用它的方法引用中定位方法定义),枚举应与它们的底层类型不同。对于所有其他目的,包括验证和执行代码,未装箱的枚举可以自由地与其基础类型相互转换。枚举可以被装箱到对应的装箱实例类型,但是这种类型和底层类型的装箱类型不一样,所以装箱不会丢失枚举的原始类型。
编辑(再次?!):等等,实际上,我不知道我第一次读对了。也许它并不能 100% 解释专门的拆箱行为本身(尽管我将 Damien 的回答视为已接受,因为它对这个问题有很大的了解)。我会继续研究这个...
另一个编辑:伙计,然后yodaj007 的回答让我陷入了另一个循环。不知何故,枚举与 ; 并不完全相同int
。仍然int
可以将 an 分配给没有强制转换的枚举变量吗?嗯?
我认为这一切最终都被汉斯的回答所阐明,这就是我接受它的原因。(对不起,达米安!)
c# - 装箱/拆箱 - 只有值类型?Ref.types - 铸造?
从 MSDN 我读到装箱/拆箱是将值类型视为对象。但是当我读到 ArrayList 时,它读到它也可以装箱。所以我很困惑,因为 ArrayList 将值和引用类型作为对象保存。此外,以下不是在术语方面的拆箱,它只是铸造?
c# - Box和UnBox是什么意思?
在 C# 中,sit 是什么意思:“Box and UnBox”?
这是我创建 Text 的 MSDN 的摘录。
但这种便利是有代价的。添加到 ArrayList 的任何引用或值类型都会隐式向上转换为 Object。如果项目是值类型,则在将它们添加到列表时必须将它们装箱,并在检索时取消装箱。铸造以及装箱和拆箱操作都会降低性能;在您必须迭代大型集合的情况下,装箱和拆箱的效果可能非常重要。
谢谢!
c# - 在“out”参数中传递值类型是否会导致变量被装箱?
我知道装箱和拆箱在性能方面相对昂贵。我想知道的是:
将值类型传递给方法的out
参数是否会导致变量的装箱/拆箱(从而影响性能)?编译器可以优化这个吗?
c# - 在 C#/.NEt 中,动态类型占用的空间是否比对象少?
我有一个控制台应用程序,允许用户指定要处理的变量。这些变量有三种形式:string、double 和 long(double 和 long 是迄今为止最常用的类型)。用户可以以任何顺序指定他们喜欢的任何变量,因此我的系统必须能够处理它。为此,在我的应用程序中,我一直将它们存储为对象,然后根据需要进行转换/取消转换。例如:
我的理解是盒装对象比标准值类型占用更多的内存(大约 12 个字节)。
我的问题是:使用动态关键字存储这些值会更有效吗?它可能会解决装箱/拆箱问题,如果它更有效,这将如何影响性能?
编辑
为了提供一些上下文并防止在我最坏的情况下“你确定你使用了足够的 RAM 来担心这个”,我需要担心 420,000,000 个数据点(60 个变量 * 7,000,000 条记录)。这是我保留的关于每个变量的一堆其他数据(包括一些布尔值等)的补充。所以减少内存确实会产生巨大的影响。