C# - 装箱/拆箱/类型转换整数问题。我不明白

2023-12-31

我很难理解这一点。考虑以下示例:

protected void Page_Load(object sender, EventArgs e)
{
    // No surprise that this works
    Int16 firstTest = Convert.ToInt16(0);
    int firstTest2 = (int)firstTest;

    // This also works
    object secondTest = 0;
    int secondTest2 = (int)secondTest;

    // But this fails!
    object thirdTest = Convert.ToInt16(0);
    int thirdtest2 = (int)thirdTest;  // It blows up on this line.
}

我在运行时遇到的具体错误是Specified cast is not valid.如果我快速观看(int)thirdTest在 Visual Studio 中,我得到的值为Cannot unbox 'thirdTest' as a 'int'.

这到底是怎么回事?


拆箱检查确切的类型,如中所述文档 http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx.

拆箱是从类型对象到值的显式转换 类型或从接口类型到实现该值的值类型 界面。拆箱操作包括:

  • 检查对象实例以确保它是装箱值 给定的值类型。

  • 将实例中的值复制到值类型变量中。

正如您所看到的,第一步是检查对象实例是否与目标类型匹配。

还引用文档中的内容:

为了在运行时成功拆箱值类型,该项目是 unboxed 必须是对先前创建的对象的引用 通过装箱该值类型的实例。尝试取消装箱 null 导致 NullReferenceException。尝试取消对某个引用的装箱 不兼容的值类型会导致 InvalidCastException。

因此,要修复此错误,请在尝试拆箱之前确保类型匹配:

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

C# - 装箱/拆箱/类型转换整数问题。我不明白 的相关文章

  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 在.rdlc报告的底部设置一个文本框

    我在 rdlc 报告中使用 tablix 有一个文本框 其中包含文本 签名 我想将此文本框放置在报告最后一页的底部 就在页脚之前 我已经用谷歌搜索了这个解决方案 但没有找到满意的结果 我的环境是VS2010 framework 4 0 有什
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke

随机推荐

  • 在 Laravel 4 中重定向回时保留表单值

    我试图在 Laravel 4 上 Redirect back 时保留表单的值 但我找不到方法来做到这一点 这是我的表格 Form open array route gt generate files gt true Form radio m
  • 将 GWT-RPC-Applicaton 部署到 JBoss AS 7.1.1 时出现 ClassNotFoundException

    我有一个 Maven 基础 GWT 应用程序 当我通过 Maven 编译 构建并部署它到 JBoss AS 7 1 1 时 我的 GWT RPC Service 出现了 ClassNotFoundException 在我包含之前 我部署了并
  • INVALID_STATE_ERR:DOM 异常 11

    我正在开发一个简单的辅助类来使用 XmlHttpRequest 发送请求 代码如下 但我无法让它发挥作用 例如 在 google chrome 中 我收到错误INVALID STATE ERR DOM Exception 11在其他浏览器上
  • 子进程命令的实时输出

    我使用 python 脚本作为流体动力学代码的驱动程序 当需要运行模拟时 我使用subprocess Popen要运行代码 请收集输出stdout and stderr into a subprocess PIPE 然后我可以打印 并保存到
  • 如果文本太长,如何自动显示工具提示?

    在 Windows 应用商店应用程序中 我有以下 TextBlock
  • 为什么 cmd.exe 在 64 位计算机上具有不同的错误级别行为?

    如果我制作一个名为 temp bat 的批处理脚本 例如 其中包含 exit b 1 当我以各种方式运行它时 我在 32 位 XP 系统和 64 位 XP 系统上得到不同的行为 在 32 位上 gt temp bat gt echo ERR
  • 如何在没有 Manifest.mbdx 的 iOS 5.0 beta 2 中解析 Manifest.mbdb 文件

    我有一个用 iOS 5 beta2 还有 iTunes 10 5 beta 制作的备份 但令我惊讶的是 它不包含 mbdx 文件 The mbdb文件看起来与以前的格式相同 如何匹配文件 ID 和文件名而不需要Manifest mbdx 备
  • PATH 中的其他脚本

    我尝试使用 Homebrew 在 OS X 10 7 5 上安装 Rails 并继续收到以下警告 我已经尝试了很多次更改 PATH 以排除 Python 目录 修改 bash profile 但我什至不确定这就是导致警告的原因 如果这是严重
  • 自定义验证器触发但它不会更新 ValidationSummary

    您好 我正在开发一个自定义表单字段验证器 似乎自定义验证器正在工作 不允许它继续到下一页 但它不会更新验证摘要 也不会显示我的星号和标签 已经变得可见 我在同一字段上还有其他验证器 例如RequiredFieldValidator 我的 V
  • 沉默樱桃

    我有一个cherrypy 服务器将xml 文件分发到网页 当我的服务器运行时 cherrypy 会为已请求的每个网页提供日志 并注明时间戳和网址 对于典型使用来说 这是一个相当不错的功能 但是当请求达到每秒超 过 10 个请求时 日志可能会
  • 推后选项卡消失 ionic 3

    我的标签在使用后消失this navCtrl push NamePage 看不懂 需要使用 ViewChild或者其他功能 我已经设定tabsHideOnSubPages on false in 应用程序模块 ts 例子 https git
  • jinja2 从模板加载模板文件

    有没有办法可以从另一个模板文件中加载 jinja2 模板 就像是 render template path to file html 我有一些想要重用的片段 因此拥有此功能对我来说很重要 include file 做这个 请参阅jinja2
  • Jupyter 密码未经过哈希处理

    当我尝试设置 jupyter 笔记本密码时 打开 jupyter notebook config json 文件时没有获得密码哈希 这是 json 文件的输出 NotebookApp password argon2 argon2id v 1
  • 在不同网站应用程序之间共享 ASP.NET .ascx 控件的最佳方式?

    假设 IIS 中有 2 个不同的 ASP NET 应用程序 此外 您还希望在这两个应用程序之间共享一些 ASCX 控件 创建 用户控件库 的最佳方法是什么 以便您可以在两个应用程序中使用相同的控件实现 而不必重复代码 控件有 ASCX 后面
  • ASP.NET Web API 记录入站请求内容

    我正在尝试注销 Web API 请求内容 即 json 字符串 我实现了一个 ITraceWriter 类 example http www asp net web api overview testing and debugging tr
  • 如何在单个 ssh 命令中使用 bash $(awk)?

    我正在尝试执行一个命令ssh包含首先执行的 子代码 或 子代码 我一直使用它 但我不知道其正式名称 但在目标服务器上 为了便于讨论 假设这是我要使用的命令 当然这可以通过hostname 但这只是一个简化的示例 其中包含我想要使用的所有格式
  • 如何评估gcc格式-溢出检查大小72

    我的示例代码 t c include
  • Firebase 推送通知不适用于 TestFlight/adHoc 版本

    我开发了一个带有推送通知的应用程序 我将其上传到 AppStore 一切正常 通知确实到达了 我现在已经更新了应用程序 以便在用户点击通知时打开网址 在调试模式下使用通过电缆连接的设备进行测试时 一切正常 问题是 如果我通过 TestFli
  • Android - 卸载时删除 SD 卡上的文件

    我的应用程序在安装时从服务器下载一些多媒体文件 我这样做是为了节省应用程序的大小空间 但是 这种方法的缺点是 当卸载应用程序时 它不会删除这些文件 我看过报道说这是可能的 但我似乎无法让它发挥作用 有没有办法在卸载时执行此操作 或者我应该忘
  • C# - 装箱/拆箱/类型转换整数问题。我不明白

    我很难理解这一点 考虑以下示例 protected void Page Load object sender EventArgs e No surprise that this works Int16 firstTest Convert T