为什么Unboxing Object to long显示InvalidCastException?

时间:2015-10-09 04:03:02

标签: c# unboxing

我想知道为什么以下内容会显示InvalidCastException

Object obj = 9;
long num = (long)obj; //InvalidCastException

在网上搜索后,我发现Object认为9为Int,因此long并不完全匹配Int。 我的问题是为什么Object将9视为Int而不是shortlong

3 个答案:

答案 0 :(得分:4)

因为9Int32 literal。指定Int64字面用法

Object obj = 9L;
long num = (long)obj;

答案 1 :(得分:2)

如果你明确说它很长,你实际上可以做到这一点。纯数字被读作整数,除非有小数点。

Object obj = 9L;
long num = (long)obj; 

以下内容也会导致无效的强制转换异常:

Object obj = 9L;
int num = (int)obj; //InvalidCastException

答案 2 :(得分:0)

int是非十进制数字文字的默认数据类型,正如double是十进制数字文字的默认值。您可以使用适当的后缀将数字文字强制为其他类型。您也可以为intdouble使用后缀,但几乎没有人使用过后缀。