- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 IDataRecord 阅读器
,我正在从中检索小数,如下所示:
decimal d = (decimal)reader[0];
出于某种原因,这会抛出一个无效的强制转换异常,指出“指定的强制转换无效。”
当我执行 reader[0].GetType()
时,它告诉我它是一个 Int32。据我所知,这应该不是问题....
我已经通过这个运行良好的代码片段对此进行了测试。
int i = 3750;
decimal d = (decimal)i;
这让我摸不着头脑,想知道为什么它无法将读取器中包含的 int 拆箱为十进制数。
有谁知道为什么会发生这种情况?有什么我遗漏的微妙之处吗?
最佳答案
您只能将值类型拆箱为其原始类型(以及该类型的可空版本)。
顺便说一下,这是有效的(只是两行版本的简写):
object i = 4;
decimal d = (decimal)(int)i; // works even w/o decimal as it's a widening conversion
关于这背后的原因,请阅读 Eric Lippert's blog entry: Representation and Identity
就我个人而言,我将通过 cast 语法完成的事情分为四种不同类型的操作(它们都有不同的 IL 指令):
box
IL 指令)和拆箱(unbox
IL 指令)dynamic_cast<Type>
,使用castclass
IL指令来验证)static_cast<Type>
,有大量 IL 指令用于原始类型之间的不同类型转换)op_XXX
方法的方法调用)。关于c# - 为什么我不能将 int 拆箱为小数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32841844/
对于数字密集型代码,我编写了一个具有以下签名的函数: def update( f: (Int,Int,Double) => Double ): Unit = {...} 但是,因为 Function3
鉴于此代码更改: int count = 0; 替换为: int count = NumberUtils.INTEGER_ZERO; 我依靠 Apache NumberUtils 进行更改,只是为了常
我有兴趣在我的解决方案中找到所有发生装箱或拆箱的地方。我知道我可以像这样使用 ildasm: Ildasm.exe yourcomponent.dll /text | findstr box 但我不想
我目前正在努力研究选角和拳击。据我目前了解: 装箱 - 值类型到引用类型(即 int 到对象) 拆箱 - 引用类型到值类型(即对象到 int) Type Casting - 目前在我看来类似于拳击但允
自动装箱/拆箱是编译器还是运行时? 考虑以下示例: public Integer get() { return 1; //(1) } 在 (1) 处,原始整数值将被转换为类似于 new In
试图说服某人从 .NET 1.1 切换 我看到有人说在 .NET 1.1 之后使用 Dictionary 类的一个优点是性能提高,因为不必拆箱/转换对象。除此之外还有其他改进吗? 或者离开 .NET
大家可以向我解释一下 new 的性质以及 Integer 的使用 Integer i = new Integer(-10); Integer j = new Integer(-10); Integer
public IList A23 { get; set; } s.A23 = new List(new int[] { 62, 63, 64 }); IList g = s.A23; double d
如果我有一个包含 Object 的列表,如下所示: List t = new List(); t.Add(10); t.Add("xyx"); 在这种情况下,如果我取回列表项,是否需要将它们拆箱? 最
最近在学习值类型,有点迷茫。此外,转换和拆箱都使用相同的语法 - (expected type)(object),对吧?那么类型之间的简单转换呢,即强制转换或只是转换? int x = (int)2.
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在使用 NSJSONSerialization 将 JSON 文档转换为 Core Foundation 类型。 我的 JSON 中有一个字段,它是一个“数字”。它有时是整数,有时是 float
我已阅读 this excellent question关于如何定期int[]在 foreach 下处理(框与否)循环。 Array确实实现了非泛型 IEnumerable所以它必须使用 object
在对 this question 的公认最佳回复中,有一个明确的解释为什么拳击会发生。 但是,如果我反编译代码(使用 java 反编译器),我看不到 scala.runtime.BoxesRunTim
根据最近的即席建议,关于如何让 Scala 通过查看字节码告诉我是否正在进行拳击,我创建了这个类: class X { def foo(ls : Array[Long]) = ls map (_.to
在一些代码中我看到了这个: private void compute(Long a, Long b, Long c) { long result = a-(b+c); ... 结果存储
我的 Sonar 6.7.1 LTS 实例无法识别以下代码中的 NullPointerException: public static boolean getBooleanFromMap() {
我发现 float 和 double 在不同情况下有后缀。那么 float 的后缀 F 和 f, double 的后缀 D 和 d 有什么区别?有这种行为的历史吗? 还有关于类型构造函数的问题,例如
我很想知道 C# 中的所有强制转换是否都会导致装箱,如果不是,所有强制转换都是代价高昂的操作吗? 示例取自 Boxing and Unboxing (C# Programming Guide)
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: Structs, Interfaces and Boxing 来自 MSDN:http://msdn.micr
我是一名优秀的程序员,十分优秀!