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

0 投票
1 回答
75 浏览

.net - 在整数文字(例如 ToString)上调用对象方法时,CLR 是否首先对文字进行装箱?

我想知道是否正在进行装箱以便在整数文字(5)上调用 ToString():

哦,如果没有,为了让 CLR 能够调用 ToString() 方法,发生了什么?

0 投票
1 回答
4176 浏览

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

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

0 投票
1 回答
288 浏览

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

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

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

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

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


更新

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

0 投票
6 回答
856 浏览

c# - 在装箱的布尔类型上使用 == 运算符和 Equals 方法有什么区别?

鉴于这两个陈述...

第一条语句返回 false。第二个语句返回 true。

我明白为什么第一个语句返回 false - 当布尔值被装箱时,它变成了引用类型,并且两个引用不相等。但是,为什么/如何第二个陈述结果为真?

0 投票
2 回答
655 浏览

c# - 在 .NET 中,如果您将结构传递给带有接口参数的方法,它是否会将值装箱?

从一个简单的测试中我可以看到,如果你将结构传递给方法,它是按值传递的,但是如果你首先将它分配给一个接口,它是通过引用传递的。

所以我的问题是,仍然有一个拳击操作来传递这样的结构吗?

0 投票
2 回答
297 浏览

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

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

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

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

0 投票
5 回答
3462 浏览

c# - 泛型约束如何防止使用隐式实现的接口对值类型进行装箱?

我的问题与这个问题有些相关:Explicitly implementation interface and generic constraint

然而,我的问题是编译器如何启用通用约束来消除对显式实现接口的值类型进行装箱的需要。

我想我的问题可以归结为两部分:

  1. 在访问显式实现的接口成员时需要装箱值类型的幕后 CLR 实现发生了什么,以及

  2. 删除此要求的通用约束会发生什么?

一些示例代码:

以及由此产生的 IL:

关键调用是constrained !!T代替box TestStruct,但后续调用在这两种情况下仍然callvirt是。

所以我不知道进行虚拟调用所需的装箱是什么,而且我特别不明白使用限制为值类型的泛型如何消除装箱操作的需要。

我先谢谢大家...

0 投票
2 回答
7789 浏览

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

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

0 投票
2 回答
544 浏览

c# - 仿制药如何消除或减少对拳击的需求?

阅读 John Sharp 的书 VS 2010,它说泛型允许消除强制转换的需要,减少值类型的装箱 - 减少?我认为它被删除以及铸造?谁能解释一下?

0 投票
4 回答
309 浏览

c# - 在 c# 中的字符串中使用原始数据类型并导致装箱

当我使用这样的东西时,是否有拳击操作[性能下降]

否则,如果我使用它,就不会发生拳击,

因为我需要避免哪怕是很小的性能下降,所以我想知道最好的选择。还给我内容的链接,以便我可以了解性能下降的陈述以及如何克服它们。