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

scala - scala类型'提取'

这可能不是最正确的术语,但我所说的 boxed type 是指Box[T]type TOption[Int]盒装的也是如此Int

如何提取这些类型?我天真的尝试:

有没有办法做到这一点?除了 Apocalisp 博客之外,我很难找到有关 Scala 中类型级元编程的说明。

0 投票
1 回答
315 浏览

c# - 拆箱修改项目集合

这个 Winforms 项目有问题。尝试在通过以下方式填充字典propList的组合框上使用 SelectedIndexChanged 事件:

这是事件本身:

然后它在 KeyValuePair 演员表上抛出这个:

我知道这是适当的演员阵容,因为调试表明:

那么我的问题是,为什么显式转换会修改项目集合?在 C++ 上长大,其中强制转换不会修改他们正在强制转换的数据,这对我来说没有意义。

请注意,使用注释掉的行会导致空引用异常,因为显然将数据源设置为空会擦除组合框中的所有成员。

0 投票
3 回答
1541 浏览

c# - mvc3 从接口反映具体类的数据注释

我试图从各种类型的视图中抽象出我的视图模型。整个编译过程没有问题,但我在“反映”(正式称为拆箱)数据注释方面遇到问题。

我有一个界面:

我有两个类实现了这样的接口:

人员编辑视图:视图/人员/编辑如下:

员工编辑视图:视图/员工/编辑:

PersonController 在哪里:

一切都编译并渲染得很好。但是,数据注释正在丢失。

因此,Employee/Edit 的结果如下:

名字 [文本字段]

姓氏 [文本字段]

你在什么公司工作?[textfield] 公司名称是必填字段

有没有为具体类拆箱这些数据注释?

边注

我尝试将 IPerson 显式转换为 Employee:

这样做需要名字,但没有从标签中获取显示属性。

更新 经过多次讨论这是否是拆箱,我还没有找到从(更基本的)具体类中获取数据注释的简单解决方案。使用视图(或助手)中的反射来获取具体类的数据注释确实会破坏简单性的目标。

我们有几个视图基本相同,但必填字段和显示名称略有不同。如果我可以将视图模型传递给接口视图并且它会找出所需的字段并显示属性,那将非常方便。如果有人想出办法做到这一点,将不胜感激。

0 投票
1 回答
850 浏览

c# - 取消装箱冻结 Winforms ComboBox

这里非常具体和奇怪的问题,谷歌和其他人无法给我答案。

我有一个带有两个组合框的表单,我们会说 A 和 B。在 A 中选择一个项目会从数据库中提取一些信息,将其放入 Dictionary,然后使用 BindingSource 将其放入 B。当用户从 B 中选择某些内容时,返回值已设置,仅此而已。

问题出在 ComboBox B 上。在其 SelectedIndexChanged 处理程序中,尝试将其 SelectedItem 拆箱会导致 ComboBox “冻结”,因此它不再显示来自 ListBox B 的新选择的结果,并且长列表在向上/向下滚动时不会刷新。但是,如果您记得数据的位置,ComboBox 仍然有效

B 的 SelectedIndexChanged 处理程序:

有两个虚拟变量表明不是 SelectedItem 属性导致了问题,只有拆箱。

使用这个确切的代码可以让 ComboBox 正常工作,但它无法返回数据。启用注释掉的行可以让它返回值,但会阻止它刷新。

此代码不会显示两件事:

  1. 即使您将注释行放入,一切正常,直到您从 ComboBox A 进行第二次选择。换句话说,如果您从 ComboBox A 中选择一次,ComboBox B 将根据您的输入刷新。但是如果从 A 中的选择发生变化,B 会冻结显示的最后一个值,并且滚动时长列表不再更新。

  2. 填充 ComboBox A 和 B 的代码几乎相同,它们的单击处理程序也是如此,但 A 始终可以正常工作,而当您从 A 中进行第二次选择时,B 会冻结。

我只能从理论上推测其原因,但我的猜测是拆箱使用了一些临时内存位置,该位置讨厌被触摸两次。根据 A 的选择填充 B 的代码也可能存在一些问题,但是当取消装箱被注释掉时它工作正常这一事实减少了这种怀疑。

据我所知,我需要执行以下操作之一:

  1. 以另一种方式访问​​ SelectedItem
  2. 无需拆箱即可访问 SelectedItem 中的数据
  3. 找到一种完全避免拆箱的方法

为格式化道歉,StackOverflow 似乎忽略了我试图使其更具可读性

0 投票
2 回答
346 浏览

c# - 自动拆箱

我有一个对象数组(object[])。此数组中的所有项都具有相同的类型(编译时未知)。我需要将此数组转换为类型化数组,也就是说,如果项目是整数,我想得到一个int[].

我已经研究了该Array.ConvertAll方法,但我需要在模板中指定一个特定类型,这意味着我必须获取元素类型,然后ConvertAll为每种可能的情况调用。

我还研究了dynamic没有更多运气的关键字(看起来dynamic[]与 相同object[])。

我怎样才能做到这一点?

0 投票
2 回答
1459 浏览

c# - 避免在泛型类中装箱和拆箱

下面是一些快速代码来说明我的问题。有什么办法可以避免这种明显不必要的装箱/拆箱?

0 投票
1 回答
89 浏览

c# - 取消装箱到更大的值类型

以下代码导致InvalidCastException.

我知道我可以x先转换为 ashort然后转换为 an int,尽管这不是一个选项,因为装箱值的类型是未知的(但它肯定小于 an int)。

取消装箱到大于装箱类型的类型时,如何解决异常?

编辑: 我通过使用dynamic类型解决了我的问题(具有所有性能影响)

0 投票
2 回答
968 浏览

haskell - 如何创建 ADT 的拆箱实例?

我很难找到适用于如何使我的数据类型未装箱、用于未装箱向量的良好资源。我将如何制作数据类型

是拆箱的一个实例?

编辑:经过一番探索之后,似乎通过强制某些函数中的参数严格,我可以说服 GHC 自动将它们拆箱。如果这适用于我的情况?我怎么知道哪些参数要严格?

0 投票
1 回答
822 浏览

c# - 装箱和拆箱:为什么这个代表不匹配?

假设以下委托“调用者”签名:

和匹配方法:

T是引用类型时,我可以像这样MyFunc 隐式调用:

相反,当T是值类型时,在隐式调用 MyFunc 时出现编译错误:

我的问题是,鉴于这两个示例,为什么MyFunc在隐式调用时调用无效,但在显式调用时有效,如下所示:

我认为这是与类型的装箱和拆箱有关的某种问题?

0 投票
1 回答
126 浏览

c# - 我如何保证我的课程可以作为特定类型拆箱?

我创建了一个IValueConverter将 bool 转换为System.Windows.Visibility对象的方法(它与 相反BooleanToVisibilityConverter)。它工作正常,除非我尝试在Observable<bool>对象上使用它。 Observable<T>是我用隐式运算符定义的一个类,用于将其转换为 T。问题是,当将其拆箱为布尔值时,我得到一个InvalidCastException.

Observable被装箱为Object. 例如:

有什么办法可以保证 myObservable<bool>可以作为布尔值拆箱?