为什么 Convert.ToInt32(Byte) 和 Convert.ToInt32(Byte[]) 都能编译,但 Convert.ToInt32(byte[]) 会抛出运行时异常?

问题描述 投票:0回答:2

每当我使用

Convert.ToInt32(byte[])
时,我都会遇到 invalidcastException,并且想知道我是否做错了什么,或者这是否是众所周知的事情。

为什么当该方法中没有支持 byte[] 的重载时,byte[] 不会抛出编译器错误?

c# arrays visual-studio-2013
2个回答
4
投票

因为有一个 overload

object
作为参数,而
byte[]
object
。这就是为什么你不会收到编译时错误。并且
Byte[]
不能转换为
Int32
这就是运行时异常的原因。

InvalidCastException:值未实现 IConvertible 接口。 -或者- 不支持转换。

相反,您需要使用

BitConverter.ToInt32
方法将字节数组转换为
Int32


2
投票

您无法使用

byte[]
Convert.ToInt32
转换为 int。 您需要 使用
BitConverter

区别在于 BitConverter 的构建正是为了完成您想要做的事情:获取字节数组并将它们转换为整数表示形式。

Convert.Int32
用于转换任何已经是整数的东西,或者可以使用
IConvertible
接口转换为整数。

Convert
只能用于实现
IConvertible
接口的类型。

© www.soinside.com 2019 - 2024. All rights reserved.