Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么将对象取消绑定到long会显示InvalidCastException?_C#_Unboxing - Fatal编程技术网

C# 为什么将对象取消绑定到long会显示InvalidCastException?

C# 为什么将对象取消绑定到long会显示InvalidCastException?,c#,unboxing,C#,Unboxing,我想知道为什么下面显示了一个InvalidCastException: Object obj = 9; long num = (long)obj; //InvalidCastException 在网上搜索后,我发现Object认为9是Int所以long与Int不完全匹配。 我的问题是为什么Object认为9是Int,而不是short或long?,因为9是一个。要指定Int64文字,请使用 Object obj = 9L; long num = (long)obj; 因为9是一个。要指定Int

我想知道为什么下面显示了一个
InvalidCastException

Object obj = 9;
long num = (long)obj; //InvalidCastException
在网上搜索后,我发现
Object
认为9是
Int
所以
long
Int
不完全匹配。
我的问题是为什么
Object
认为9是
Int
,而不是
short
long

,因为
9
是一个。要指定
Int64
文字,请使用

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

因为
9
是一个。要指定
Int64
文字,请使用

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

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

int
是非十进制数字文本的默认数据类型,就像
double
是十进制数字文本的默认数据类型一样。您可以使用适当的后缀将数字文字强制转换为其他类型。你也可以使用
int
double
的后缀,但几乎没有人这样做。

如果你明确地说这是一个很长的过程,你实际上可以做到这一点。除非有小数点,否则纯数字被读取为整数

Object obj = 9L;
long num = (long)obj; 
以下情况还将导致无效的强制转换异常:

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

如果你明确地说这是一个很长的过程,你实际上可以做到这一点。除非有小数点,否则纯数字被读取为整数

Object obj = 9L;
long num = (long)obj; 
以下情况还将导致无效的强制转换异常:

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

您的第二个示例,您是否打算使用
9L
?是的,我使用了!复制粘贴毁了我。你的第二个例子,你是想用
9L
?是的,我用了!复制粘贴毁了我。这也行:
long num=(int)obj这也会起作用:
long num=(int)obj