问题标签 [boxing]
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.
java - 为什么有些语言需要装箱和拆箱?
这不是什么是装箱和拆箱的问题,而是为什么像 Java 和 C# 这样的语言需要它?
我非常熟悉 C++、STL 和 Boost。
在 C++ 中,我可以很容易地写出这样的东西,
我对Java有一些经验,但我真的很惊讶,因为我不得不写这样的东西,
我的问题,为什么它应该是一个对象,在谈论泛型时,在技术上包含原始类型有什么困难?
java - 如何将 int[] 转换为 List在 Java 中?
我如何转换int[]
成List<Integer>
Java?
当然,除了逐项循环执行之外,我对任何其他答案都感兴趣。但是,如果没有其他答案,我会选择一个作为最好的答案,以表明此功能不是 Java 的一部分。
.net - 装箱/拆箱和类型转换有什么区别?
装箱/拆箱和类型转换有什么区别?
通常,这些术语似乎可以互换使用。
c# - 通用枚举到int的C#非装箱转换?
给定一个始终是枚举类型的泛型参数 TEnum,有没有办法在不装箱/拆箱的情况下从 TEnum 转换为 int?
请参阅此示例代码。这将不必要地对值进行装箱/拆箱。
上面的 C# 是发布模式编译为以下 IL(注意装箱和拆箱操作码):
枚举转换已在 SO 上得到广泛处理,但我找不到针对此特定情况的讨论。
c# - When does a using-statement box its argument, when it's a struct?
I have some questions about the following code:
My questions are:
- Will the using-statement that operates on the
Disposable
struct, returned fromTest()
box the struct, or not? - How can I find the answer myself?
To try to find out myself, I inspected the IL produced by the above code, and here's the IL for the Main(...)
method:
I suspect the call to the virtual method there, on L_0010
will introduce a boxing operation, but the actual box
instruction is not here.
The reason I'm asking is that a while ago, probably 1-2 years, I saw online an "optimization" of the using-statement someone commented on. The case was where the using-statement was used as syntax for a short-time lock on an object, where the lock was acquired in the method, and a struct was returned, which when disposed of, would release the lock, code like this:
and the comment was that by changing the return type of the LockTheObject
method from IDisposable
to the actual struct used, boxing was avoided.
But I'm wondering if this is true, or still true.
Can anyone point me in the right direction? If, in order to see the box operation, I'll have to inspect the runtime assembly code, please show me an example of what to look for, I'm well versed in assembly code so that's not a problem, but nothing jumped out at me when I looked at that either.
c# - 在 C# 中使用“类型”对象对对象进行类型转换
到目前为止,这对我来说有点棘手。我想知道是否可以使用 System.Type 对象对对象进行类型转换。
我在下面说明了我的意思:
以上是一个通用接口,这就是我使用“对象”作为类型的原因。
c# - BCL中的隐藏拳击?
最近我意识到 BCL 中的某些部分仍然使用一些“遗留”代码,这些代码可能是在框架 v2.0 中引入泛型之前编写的。显然,“遗留”代码的一部分可能会导致 CLR 执行大量装箱/拆箱操作。
由于过度使用拳击从来都不是一件好事,我想知道在 BCL 中是否还有其他一些关键的地方你注意到拳击发生了?谢谢
.net - 如何判断类型是否需要装箱?
MSDN 文档说只有值类型需要装箱,但这不适用于字符串,它是一种值类型,不需要装箱。我最初尝试过 Type.IsValueType,但由于它对字符串返回 true,因此我无法使用它来确定类型是否真的需要装箱。还有其他你知道的方法吗?字符串是唯一的例外吗?
更新:我在我的代码中犯了一个错误,我引用了一个 int 并且我认为它是一个字符串。字符串实际上是一种值类型,感谢您指出!
c# - 为什么具有 T: 类约束的泛型方法会导致装箱?
为什么将 T 限制为类的通用方法会在生成的 MSIL 代码中包含装箱指令?
我对此感到非常惊讶,因为肯定因为 T 被限制为引用类型,所以生成的代码不需要执行任何装箱。
这是c#代码:
这是生成的IL:
注意方框 !!T说明。
为什么会产生这个?
如何避免这种情况?
.net - C++/CLI: Boxing and Generic Lists
I am trying to create a generic list of references to PointF
objects. (No, I am not looking to create a generic list of PointF
objects.) However, the following line fails to compile:
On the other hand, creating an array of PointF
references works without a problem as follows:
Here is a sample program:
How do I create a generic list of PointF
references? In other words, how do I create a generic list of boxed PointF
s?