c# - 为什么我不能将 boxed int 转换为可为 null 的 decimal?

标签 c# .net

<分区>

为什么会抛出 InvalidCastException?有人可以向我描述这种行为吗?

object zero = 0;
decimal? dec = (decimal?)zero;

最佳答案

装箱的 int 只能拆箱为 int。然而,这是合法的:

object zero = 0;
decimal? dec = (decimal?)(int)zero;

参见 MSDN或 ECMA 334 C# 规范了解详情。这里的关键是:

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

  1. 检查对象实例以确保它是给定值类型的装箱值。
  2. 将实例中的值复制到值类型变量中。

编辑:这个链接article值得退出评论。谢谢罗伯·肯尼迪!

关于c# - 为什么我不能将 boxed int 转换为可为 null 的 decimal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1103935/

相关文章:

c# - 默认构造函数和无参数构造函数之间的区别?

c# - 序列化中的 System.OverflowException

.net - 可以将报告发送到 ReportPortal for .net (Specflow) 中的一次启动

c# - equals 和 ID 比较之间的性能差异

c# - 将 VB.net 代码与 C# 代码混合

c# - 标记 Enum 和具有重叠含义的互斥 Enum

c# - 如何制作包含 C# 应用程序和 sql server 的安装文件

c# - 在派生自 Control 的 ASP.NET 自定义控件中呈现自关闭标记

c# - ASP.NET MVC 4 FilePathResult 和静态文件处理程序

c# - c# .NetStandard 项目的 *.sln *.csproj 文件中的相对路径