以下代码会引发编译时错误,例如
无法将类型“string”转换为“int”
string name = Session["name1"].ToString();
int i = (int)name;
而下面的代码可以成功编译并执行:
string name = Session["name1"].ToString();
int i = Convert.ToInt32(name);
我想知道:
为什么第一段代码会生成编译时错误?
这两个代码片段有什么区别?
(int)foo
只是一个强制转换Int32
(int
在 C# 中)类型。这是内置于 CLR 中并要求foo
是一个数字变量(例如float
, long
等)从这个意义上说,它与 C 中的强制转换非常相似。
Convert.ToInt32
被设计为通用转换函数。它比铸造有更多的作用。也就是说,它可以从any原始类型到 aint
(最值得注意的是,解析string
)。您可以查看此方法的重载的完整列表在 MSDN 上.
And as 斯特凡·施泰格提及在评论中:
另外,请注意,在数字层面上,(int) foo
截断foo
(ifoo = Math.Floor(foo)
), 尽管Convert.ToInt32(foo)
uses 四舍五入到偶数(将 x.5 舍入到最接近的偶数,意思是ifoo = Math.Round(foo)
)。因此,结果不仅是实施方面的,而且是数字方面的not相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)