问题标签 [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.

0 投票
2 回答
795 浏览

java - 拆箱问题

我有一个扩展 LinkedList 类的类。这是代码的摘录:

预计这将返回自动拆箱的 int 值。但是由于某种原因,编译器会抛出一个错误,指出类型不兼容,并且所需的类型是 int,而找到的类型是 Integer。这在不同的课程中非常有效!是什么赋予了?:(

0 投票
2 回答
1598 浏览

scala - 如何在反编译的 Scala 代码中识别装箱/拆箱?

在对这个问题的公认最佳回答中,有一个明确的解释为什么会发生拳击。

但是,如果我反编译代码(使用 java 反编译器),我看不到 scala.runtime.BoxesRunTime 的使用。此外,如果我分析代码(使用 JProfiler),我看不到任何 BoxesRunTime 实例。

那么,我如何真正看到装箱/拆箱的证据?

0 投票
1 回答
4176 浏览

c# - 使用 out 和 ref 参数时的装箱和拆箱

当方法接受 ValueType 的 out/ref 参数时,是否会发生装箱/拆箱?

0 投票
2 回答
1551 浏览

c# - Expression.LessThan 与 LambdaExpression>

我有一个 LambdaExpression,它将一个对象作为参数并最终返​​回一个对象。出于测试的目的,这里有一个 Lambda(创建以匹配我真正传入的内容),它返回一个作为对象装箱的 DateTime。为了解决这个问题,LambdaExpression 接受一个 XmlNode 并返回一个对象。它必须返回一个对象,真正的返回类型可以是以下任何一种: DateTime,bool,int,decimal,XmlDocument [到目前为止] 一般的想法是在解析器深处的某个地方,这个 lambda 被创建并从中提取一个值输入参数并返回它输入的,但装在一个对象中。

稍后在代码中,我们正在评估 <、<=、>、>=、== 和 !=,因此我们希望将此 LambdaExpression 的结果与另一个 Expression 进行比较

通常,我们可以假设 LambdaExpression 位于 Expression.LessThan 右侧的左侧,几乎可以是任何表达式,但假设它是输入的。这意味着它可能是 ConstantExpression 或类似的......但它有一个类型。

这意味着 Expression.LessThan [例如] 失败,因为在调用 Expression.Invoke 时 LambdaExpression 返回一个对象,而 RHS 是该类型的任何类型。

假设从 LambdaExpression 返回的对象内装箱的类型实际上与右侧的类型相当;例如

如何编写一个可以将装箱类型与未装箱类型进行比较而不会崩溃的表达式?我在 linqpad 中尝试了各种排列,包括尝试用普通的 c# 编写它——即没有表达式,只是嵌套了 if-then-else 但是我无法让它完全正确地工作。通常,我可能会写这样的东西:

这样,假设 o 和 compare 实际上是相同的类型,并且其中一个被装箱为对象,我们仍然可以执行 < 操作...

所以我想我的问题是,当我在左边有一个 LambdaExpression 和在右边的 Expression 时,我该如何编写上面的代码[如果两者不是同一类型,则结果为 false 比崩溃要好]

希望有人能帮忙,

加雷斯

0 投票
1 回答
288 浏览

vb.net - 避免对未知输入进行装箱/拆箱

我正在创建一个解析 XML 并检索一些数据的应用程序。每个 xml 节点指定数据 (const)、从 (var) 获取数据的记录集的列名、取决于某些条件 (enum) 和其他条件的可能数据值的子集。除了数据之外,它还可以指定必须向用户显示数据的格式。

问题是,对于每种节点类型,我需要以不同方式处理值并执行一些动作,因此,对于每个节点,我需要将返回值存储在临时变量中以便稍后对其进行格式化......我知道我可以格式化它就在那里并返回它,但这意味着重复我自己,我讨厌这样做。

所以,问题是:如何在临时变量中存储要返回的值,同时在类型未知且我不能使用泛型时避免装箱/拆箱?

PS:我正在设计解析器、XML Schema 和将填充记录集的视图,因此对所有内容的更改都是合理的。


更新

我无法发布代码或 XML 值,但这是 XML 结构和实际标签。

0 投票
2 回答
297 浏览

.net - 当您只存储引用类型时,使用泛型集合有什么好处吗?

我一直在读一本书并遇到一个声明,泛型允许程序员在使用例如时避免装箱和拆箱Stack

我认为这并不完全正确,因为堆栈(不是通用的)可以只保存引用类型变量,然后只有强制转换,没有装箱。

编辑:AFAIK,装箱只涉及到对象转换的值类型。这是正确的还是我错过了什么?

0 投票
2 回答
7789 浏览

java - 整数包装类和 == 运算符 - 在哪里指定行为?

我发现它在 的范围内返回 == (如果是的话)-128 - 127,为什么会有这样的规范?

0 投票
2 回答
168 浏览

c# - 在 C#/.NET 中将值类型作为引用类型传递时如何获得最佳性能?

如果必须将值类型传递给方法,但由于某种原因,它必须作为引用类型传递,是否更快:

  1. 通过它作为object
  2. 通行证是作为ValueType
  3. 将其作为通用包装器传递

我在下面放了一些示例代码来说明我的意思:

0 投票
3 回答
7720 浏览

java - 整数自动拆箱和自动装箱会带来性能问题?

我们目前正在使用x++;where xis anInteger和 not an进行一些迭代和其他操作int

操作可能会在我们系统上的某些用户操作中重复,但不会像数学应用程序那样过于复杂或繁多,每个用户事务最多可重复 10000 次。

这种拆箱和后来的装箱会影响我们的性能一些明显的毫秒吗?

0 投票
5 回答
10454 浏览

c# - 比较盒装值类型

今天我偶然发现了我写的一个有趣的错误。我有一组可以通过通用设置器设置的属性。这些属性可以是值类型或引用类型。

在为此方法编写单元测试时,我发现值类型的条件始终为真。我很快就发现这是由于装箱/拆箱。我也没有花很长时间将代码调整为以下内容:

问题是我对这个解决方案并不完全满意。我想保持一个简单的参考比较,除非值被装箱。

我正在考虑的当前解决方案只需要Equals()装箱值。检查盒装值似乎有点矫枉过正。没有更简单的方法吗?