gpt4 book ai didi

c# - 奇怪的类型转换行为。无法将对象 (int) 转换为 long

转载 作者:IT王子 更新时间:2023-10-29 03:54:47 27 4
gpt4 key购买 nike

我有以下代码:

int intNumber1 = 100;
object intNumber2 = 100;
bool areNumberOfTheSameType = intNumber1.GetType() == intNumber2.GetType(); // TRUE
bool areEqual = intNumber1.Equals(intNumber2); // TRUE

long longNumber1 = (long) intNumber1; // OK
long longNumber2 = (long) intNumber2; // InvalidCastException. Why?

为什么第二次转换不起作用?我意识到这可能是因为对象没有显式转换为 long,但如果我们在运行时查看它的类型,它是 System.Int32

如果我使用 vardynamic 而不是 object,它会起作用。

有什么想法吗?

最佳答案

intlong 的转换被解释为两种类型之间的转换。

objectint 的转换被解释为对已装箱的 int 进行拆箱。

它是相同的语法,但它说的是两个不同的东西。

在工作情况下(intlong, object (boxed int)→int ), 编译器确切地知道要生成什么代码。如果盒装 intlong 可以工作,编译器将不得不以某种方式找出要使用的转换,但它没有足够的信息来执行此操作。

另见 this blog post from Eric Lippert .

关于c# - 奇怪的类型转换行为。无法将对象 (int) 转换为 long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3541680/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com