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代码>