问题标签 [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 投票
9 回答
57799 浏览

language-agnostic - 什么是装箱和拆箱,权衡取舍是什么?

我正在寻找一个清晰、简洁和准确的答案。

理想情况下作为实际答案,尽管欢迎提供良好解释的链接。

0 投票
3 回答
973 浏览

c# - C#拳击题

首先,举两个例子:

现在,我猜测为什么第二个不起作用是因为拳击。此代码背后的目的是实现IComparable. 我需要一些方法来将一个对象强制转换为 long 或 ulong ,或者如果两者都不是,而不是抛出错误。我不想对每种基本数字类型(字节、整数、长整数、ubyte 等)实施检查,我宁愿只以最大的数字类型捕获它们并以这种方式处理。这里所有聪明人的想法?我怎样才能拆箱对象,最好避免反射,但我想如果这是唯一的方法......或者我应该不实现的非泛型版本IComparable

编辑:

这似乎可行,但似乎是解决问题的可怕技巧。只有我吗?

0 投票
4 回答
1015 浏览

c# - 实例化“AS”关键字

我最近开始使用 JSON 和 ExtJs 框架,并且在示例中遇到了以下代码。

我们使用以下方法从前端检索信息:

然后在示例中,他们执行以下操作:

我以前从未见过像这样使用“as”关键字。这只是将 updatedConfig 变量显式装箱为 JavaScriptObject 的另一种形式,还是我对此不了解?

谢谢

0 投票
6 回答
7285 浏览

c# - 拳击与拆箱

我最近遇到的另一个 C# 面试问题是我是否知道装箱和拆箱是什么。我解释了值类型在堆栈上,引用类型在堆上。当一个值被转换为引用类型时,我们称之为装箱,反之亦然。

然后他让我计算一下:

是什么i

我把它搞砸了,说 50,实际上是 20。现在我想明白为什么了,但是当我玩不同的组合时,我很惊讶地看到这个:

我也期待看到b == 2,但事实并非如此,为什么?是不是因为第二次装箱破坏并替换a了堆上的整个对象?

因为如果我这样做,那很好:

是什么t2.x?它应该是 3,它是。但这根本不是装箱/拆箱的例子,对吗?那么你会如何总结这一点呢?

在装箱/拆箱转换中,这些值是否会变得与上述相同?

0 投票
5 回答
4164 浏览

c# - C#:使用泛型将对象转换为无符号数字类型

我正在尝试编写一些代码来将来自对象类型字段(来自 DataSet)的数据转换为它的目标(类型化)字段。我正在(至少尝试)使用动态转换。它似乎适用于字符串、int、DateTime。

但它不适用于无符号类型(ulong、uint)。下面有一个简单的代码,显示了我想要做什么。如果将 ul var 类型从 ulong 更改为 int,它可以正常工作。

有人有线索吗?

0 投票
6 回答
9439 浏览

java - 为什么有些语言需要装箱和拆箱?

这不是什么是装箱和拆箱的问题,而是为什么像 Java 和 C# 这样的语言需要它?

我非常熟悉 C++、STL 和 Boost。

在 C++ 中,我可以很容易地写出这样的东西,

我对Java有一些经验,但我真的很惊讶,因为我不得不写这样的东西,

我的问题,为什么它应该是一个对象,在谈论泛型时,在技术上包含原始类型有什么困难?

0 投票
4 回答
24162 浏览

c# - 为什么我不能将 int 拆箱为小数?

我有一个IDataRecord reader我正在检索一个小数,如下所示:

由于某种原因,这会引发一个无效的转换异常,指出“指定的转换无效”。

当我这样做reader[0].GetType()时,它告诉我它是一个 Int32。据我所知,这应该不是问题......

我已经通过这个片段测试了这一点,效果很好。

这让我摸不着头脑,想知道为什么它无法将阅读器中包含的 int 拆箱为小数。

有谁知道为什么会发生这种情况?我错过了什么微妙的东西吗?

0 投票
6 回答
48870 浏览

.net - 装箱/拆箱和类型转换有什么区别?

装箱/拆箱和类型转换有什么区别?

通常,这些术语似乎可以互换使用。

0 投票
4 回答
4812 浏览

c# - 将对象转换为值类型时,解决 c# 拆箱异常的最佳方法是什么?

我刚刚将一个代码片段从 VB.NET 转换为 C# 并偶然发现了这个问题。

考虑这段代码:

编译器或运行时没有错误。z 是五。

现在让我们把这段代码翻译成 C#

编译器没有错误,但在运行时抛出异常:

现在我的问题是,这将是最聪明的 C# 方法。

目前我的代码看起来像。

但另一个解决方案是:

这看起来有点令人困惑,但我猜它的开销可能比 decimal.Parse 少。

0 投票
5 回答
1234 浏览

c# - C# 类型推断获取错误的类型

我创建了以下属性,它抛出了一个InvalidCastExceptionif getter was 访问 when ViewState[TOTAL_RECORD_COUNT]is null

我的想法是它错误地尝试将对象拆箱ViewState[TOTAL_RECORD_COUNT]到a 中,但int失败了,因为它包含 a long,但我认为该逻​​辑可能存在缺陷。我将把它作为练习留给读者指出这个缺陷。

从那以后,我将该属性更改为读取

效果很好。不过,我仍然想知道我的原始版本出了什么问题...... StackOverflow 来救援?

请注意,如果我尝试(long)(ViewState[TOTAL_RECORD_COUNT] ?? -1)在即时窗口中执行,我会收到错误消息Cannot unbox 'ViewState[TOTAL_RECORD_COUNT] ?? -1' as a 'long',如果我执行(ViewState[TOTAL_RECORD_COUNT] ?? -1).GetType().Name,我会收到Int32. 我可以执行(long)-1并最终以 -1 作为Int64...所以怎么了?