一尘不染

Convert.ToInt32和(int)有什么区别?

c#

以下代码会引发编译时错误,例如

无法将类型“字符串”转换为“整数”

string name = Session["name1"].ToString();
int i = (int)name;

而下面的代码可以编译并成功执行:

string name = Session["name1"].ToString();
int i = Convert.ToInt32(name);

我想知道:

  1. 为什么第一个代码会生成编译时错误?

  2. 这两个代码段之间有什么区别?


阅读 488

收藏
2020-05-19

共1个答案

一尘不染

(int)foo只是转换为Int32int在C#中)类型。这是建立在CLR和要求foo是数字变量(例如floatlong等),在这个意义上,它是非常类似于C的投

Convert.ToInt32设计为通用转换函数。它比铸造更重要。也就是说,它可以从 任何 原始类型转换为a int(最著名的是解析a
string)。您可以在MSDN上查看此方法的重载的完整列表。

正如Stefan Steiger 在评论中提到的那样

另外,请注意,在数值级别上,(int) foo截断fooifoo = Math.Floor(foo)),而Convert.ToInt32(foo)使用一半至偶数舍入(将x.5
舍入为最接近的EVEN整数,即ifoo = Math.Round(foo))。因此,结果不仅在实现方面,而且在数值上 也不 相同。

2020-05-19