【问题标题】:C# Integer casting [duplicate]C#整数转换[重复]
【发布时间】:2019-12-11 05:44:18
【问题描述】:

我正在尝试执行以下操作

int num = 20;
object number = num;
int result = (int)num;

它对我大喊“无效的演员表”,因为根据编译器的说法:

无法将“System.Int64”类型的对象转换为“System.Int32”类型

你能解释一下为什么我的 Int32 变成了 Int64 吗?

【问题讨论】:

  • 无法复制。你的代码就像一个魅力
  • dotnetfiddle ← 代码运行良好。
  • 我怀疑您发布的代码与实际问题略有不同。您是否正在尝试将long 转换为object,然后再转换为int
  • @itsme86:你为什么感到惊讶?变量number 从未使用过,num 仍然是20。 @OP:显示真实代码

标签: c# oop types .net-core casting


【解决方案1】:

object number = num; 不是演员表,而是boxing

虽然所有引用类型都继承自 Object - 显式或隐式地值类型没有继承链。相反,他们被装进了一个……某事的实例。然后将其投射到对象中。

显然该实例采用Int64 rather then Int32。出于某种原因,将 Int32 放入仅采用 Int32 的 Box 中的选项甚至从未被考虑过。

无论如何,不​​再有真正的理由这样做。借助泛型之类的东西,您可以解决以往对值类型进行装箱的大多数需求。

【讨论】:

    猜你喜欢
    • 2017-10-08
    • 1970-01-01
    • 2011-08-22
    • 2016-01-26
    • 2015-03-14
    • 1970-01-01
    • 2023-03-13
    • 2019-12-01
    • 2020-01-06
    相关资源
    最近更新 更多