对拳击感到困惑。将 -1 转换为 Int64 会抛出 InvalidCastException

2024-04-03

好吧,我一定忽略了一些非常简单的事情,但我迷路了。

鉴于这种

object val = -1;
var foo = (Int32)(val);
var bar = (Int64)(val);

转换为 Int64 会引发 InvalidCastException。

我知道这与拳击的一些奇怪之处有关,但我不明白其中的原因。

据我了解, val 在第一行被装箱为 Int32 。

然后,当我尝试转换为 Int32 以外的其他内容时,会引发 InvalidCastException 。我想这意味着我试图将 val 拆箱为 Int64,而实际上它是 Int32?

看起来还是很奇怪。转换无法取消该值的装箱然后尝试执行转换吗?

像这样的东西(显然这过于简单化了,也许盒装类型未知,所以这是不可能的?):

object val = -1;
Int32 unboxed = (Int32)(val);
var bar = (Int64)(unboxed);

有人(读:埃里克·利珀特)教我这背后的推理。

UPDATE:从埃里克的博客中,里德发布了一个链接,这就是我一直在寻找的简洁答案

“...这将需要生成大量代码,而且速度非常慢。代码当然太大了,您可能希望将其放入自己的方法中,然后生成对它的调用。而不是默认情况下这样做,并且总是生成缓慢、庞大且脆弱的代码,相反,我们决定拆箱只能拆箱到确切的类型。如果您想调用执行所有这些操作的慢速方法,它是可用的 - 您始终可以调用 Convert.ToInt32,它会在运行时为您执行所有分析。我们让您在“快速而精确”或“缓慢而宽松”之间进行选择,明智的默认值是前者。如果您想要后者,请调用该方法......”


这是因为您无法在单个操作中拆箱并执行转换。您必须将 Int32 值拆箱为 Int32,然后再转换其类型。

因此,这需要将对象拆箱,然后转换为 Int64:

object val = -1;
int foo = (Int32)val;
Int64 bar = (Int64)(Int32)val;

Eric Lippert 在他的博客文章中详细介绍了这一点代表和身份 http://ericlippert.com/2009/03/03/representation-and-identity/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对拳击感到困惑。将 -1 转换为 Int64 会抛出 InvalidCastException 的相关文章

  • 如何使用 EPPlus 在单个 Excel 单元格中加载包含逗号的文本

    我正在尝试EPPlus 库 http epplus codeplex com 我被困在这个问题上 我必须在单个单元格中加载文本 但是当该文本包含逗号时 我使用的代码会沿着多个单元格 沿着正确的方向 分割文本 这是我用来加载文本的代码 usi
  • 删除是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 C 编程 free 如何知道要释放多少 https stackoverflow com questions 1518711 c programming how does free know how m
  • 在现代 C++ 中,临时生命周期延长何时有用?

    在 C 中 您可以将函数的返回值 返回值 而不是引用 绑定到 const 引用 并且代码仍然有效 因为该临时对象的生命周期将延长到作用域末尾 例如 std string get string return abc void f const
  • CSharpRepl emacs 集成?

    我碰巧知道莫诺CSharpRepl http www mono project com CsharpRepl 是否有 emacs csharp 模式使用它在一个窗口中运行 REPL 并像 python 模式一样在另一个窗口中编译 运行 C
  • 从代码中,如何创建对存储在附加属性中的对象的属性的绑定?

    我们有一个继承的附加属性来存储一个对象 在可视化树的更下方 我们希望从代码绑定到该对象的属性 通常我们像这样构建绑定的路径部分 var someBinding new Binding Path new PropertyPath Attach
  • 如何使用 SOAP 且不使用 WSE 在 .NET 中签署 Amazon Web 服务请求

    亚马逊产品广告 API 以前称为 Amazon Associates Web Service 或 Amazon AWS 实施了一项新规则 即自 2009 年 8 月 15 日起 向其发送的所有 Web 服务请求都必须经过签名 他们在其网站上
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • 计算另一个表达式中的 C# 表达式

    我想在另一个表达式中使用一个表达式 Expression
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • 如何对 NServiceBus.Configure.WithWeb() 进行单元测试?

    我正在构建一个 WCF 服务 该服务接收外部 IP 上的请求并将其转换为通过 NServiceBus 发送的消息 我的单元测试之一调用Global Application Start 它执行应用程序的配置 然后尝试将 Web 服务解析为 验
  • 如何在三个 IEnumerable 上使用 Zip [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Linq 从 3 个集合创建项目 https stackoverflow com questions 5284315 create items from 3 collections using
  • C#6 中的长字符串插值行

    我发现 虽然字符串插值在应用于现有代码库的字符串 Format 调用时非常好 但考虑到通常首选的列限制 字符串对于单行来说很快就会变得太长 特别是当被插值的表达式很复杂时 使用格式字符串 您将获得一个可以拆分为多行的变量列表 var str
  • 析构函数中的异步操作

    尝试在类析构函数中运行异步操作失败 这是代码 public class Executor public static void Main var c1 new Class1 c1 DoSomething public class Class
  • 如何使用 NPOI 按地址(A1、A2)获取 Excel 单元格值

    我有一个 Excel 单元格地址 例如 A1 A2 如何使用 C 中的 NPOI 框架以编程方式访问此单元格 我找到的一些 Java POI 示例代码 CellReference cr new CellReference A1 row my
  • 逆向工程 ASP.NET Web 应用程序

    我有一个 ASP NET Web 应用程序 我没有源代码 该 bin 包含 10 个程序集和一个 compiled 文件 我在 App Code dll 上使用 Reflector 它向我显示了类和命名空间之类的东西 但它太混乱了 有没有什
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC
  • 结构化绑定的用例有哪些?

    C 17 标准引入了新的结构化绑定 http en cppreference com w cpp language structured binding功能 最初是proposed http www open std org jtc1 sc

随机推荐

  • Java:浮点格式取决于区域设置[重复]

    这个问题在这里已经有答案了 我住在比利时 一般来说 在数学中 我们用逗号写小数 如下所示 3 141592这也是我的结果format浮子 System out println String format f 3 141592 So the
  • Google App Engine 目前在哪些国家和地区被屏蔽?

    我经营一个网站 您可以在世界任何地方聘请记者 我们在 150 个国家 地区设有记者 它托管在 App Engine 上 有时我们会收到记者发电子邮件给我们 说我们的网站无法从他们所在的地方访问 具体错误是 您的客户端无权从此服务器获取 UR
  • VBA通过构造继承,构造函数不起作用? [复制]

    这个问题在这里已经有答案了 我刚刚开始使用 VBA 中的类 并且遵循概述的 构造继承 方法here https www theartofquantfinance com inheritance by construction in vba
  • UILabel 的变量 IBOutlet 名称?

    呃 这里遇到了一些麻烦 我在 Interface Builder 中有 4 个显示标签 在视图控制器中设置为 IBOutlet 我已经用这些名字设置了它们 标签1 标签2 标签3 标签4 我想更改随机选择的标签的标签文本 我正在尝试这个 在
  • Microsoft Visual C++ Runtime Package 框架在清单中缺少框架依赖项声明

    我在适用于 Windows 8 1 的 Windows 应用程序认证工具包上收到以下错误 应用程序清单测试检测到以下错误 XXX 需要 对 Microsoft Visual C 运行时包的依赖 Microsoft VCLibs 110 00
  • jQuery:获取给定“y”位置上方的元素

    如何使用 jQuery 以优雅的方式做到这一点 Apply z属性 例如 红色背景 给 div 的每个孩子parent当它们的位置高于给定的顶部偏移量时y 我尝试过不同的方式 但我对其中任何一个都不满意 我知道必须有一种简短而优雅的方法来做
  • 将 Django 开发数据库 (.sql3) 迁移到 Heroku

    如何将 Django sql3 开发数据库迁移到 heroku Per here https stackoverflow com questions 14500631 how can i upload a db to heroku and
  • Django 权限,自己编码还是使用应用程序?

    这个问题 我认为 是关于 Django 中的对象 行级别权限 我们正在构建一个社区 需要能够根据用户采取的操作设置权限 例如 在您发布了如此多的答案之前 您不应该能够启动线程 此外 用户应该能够删除属于自己的内容 根据 Django 文档
  • 暂停 knockout.js 1.2.1 中的绑定

    淘汰赛中有暂停和恢复绑定的选项吗 版本 knockout js 1 2 1 我们需要暂停绑定的原因如下 在某些操作过程中 我们必须从服务器加载大量数据 例如 多个选择的整个数据都已更改 有些表的行是动态添加的等 现在 在当前场景中 表单与视
  • 如何定期刷新Excel中的数据库数据?

    在我正在制作的 Excel 电子表格 VBA 脚本中 我需要从数据库调用数据 并每 5 分钟刷新一次值 该程序从按下按钮开始 并且应该连续运行 直到用户中断执行 我目前不确定如何让 Excel VBA 等待 5 分钟而不暂停电子表格 并且理
  • 布尔表达式+短路

    我想用布尔表达式 短路求值打印一条消息 我不允许使用 if while for 但在 C Lion 中一切正常 但在其他编译器中它说 hw2q1 c In function decision hw2q1 c 38 55 error valu
  • C 8位16位32位编译器之间的区别[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Log4j RollingFileAppender 未将映射器和减速器日志添加到文件中

    我们希望将应用程序日志打印到本地节点上的文件中 我们使用 Log4j 的 RollingFileAppender Our log4j properties文件如下 ODS LOG DIR var log appLogs ODS LOG IN
  • 如何在Android资源中使用unicode?

    我想用this http www fileformat info info unicode char 1f4e1 index htm我的资源文件中的 unicode 字符 但无论我做什么 我都会以 dalvikvm 崩溃结束 使用 Andr
  • 在 Java 中读取 CDATA XML

    我正在尝试解析 XML 中的 CDATA tpyes 代码运行良好 它将在控制台中打印 Links 大约 50 次 因为这就是我拥有的链接数量 但链接不会出现 它只是一个空白的控制台空间 我可能会错过什么 package Parse imp
  • 获取用户最后拍摄的照片

    嘿 我想获取用户通过任何相机应用程序拍摄的最后一张照片 我不知道该怎么做 谁能帮我 此外 我想将该图像作为电子邮件或彩信的附件发送 thanks Find the last picture String projection new Str
  • 在 sails.js 中,如何访问控制器外部的会话变量?

    在控制器中 这很容易 访问会话变量很简单 req session x 1 但是 我如何访问该外部控制器 喜欢服役吗 module exports test function No req session here 您可以创建一个将注册的主控
  • 如何在 IntelliJ 中更改 Maven 的 Java 版本?

    我对 Maven 和 IntelliJ IDEA 都很陌生 我有一个用 Java 8 编写的 Maven 项目 每当我尝试构建它 Maven 项目窗口 gt 生命周期 gt 编译 gt 运行 Maven Build 时 我都会收到一系列编译
  • 保留字行为[重复]

    这个问题在这里已经有答案了 在创建一个基于计数器的小型游戏时 我有一个像这样的数组 var status day dusk night dawn 如果我尝试访问数组的第一个索引 我会得到 console log status 0 yield
  • 对拳击感到困惑。将 -1 转换为 Int64 会抛出 InvalidCastException

    好吧 我一定忽略了一些非常简单的事情 但我迷路了 鉴于这种 object val 1 var foo Int32 val var bar Int64 val 转换为 Int64 会引发 InvalidCastException 我知道这与拳