首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么要使用Convert.ToInt32而不是强制转换?

为什么要使用Convert.ToInt32而不是强制转换?
EN

Stack Overflow用户
提问于 2011-02-10 00:21:32
回答 6查看 15.3K关注 0票数 19

今天在工作中突然出现了一个关于如何将对象转换为其特定类型( int)的问题,我说要转换它:

代码语言:javascript
复制
int i = (int)object;

一位同事说要用Convert.ToInt32()

代码语言:javascript
复制
int i = Convert.ToInt32(object)

Convert.ToInt32()和直接对象转换有什么不同?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-02-10 00:25:01

并不是每个对象都可以直接转换为int。例如,以下代码将无法编译:

代码语言:javascript
复制
string s = "1";
int i = (int)s;

因为string不能隐式转换为int

然而,这是合法的:

代码语言:javascript
复制
string s = "1";
int i = Convert.ToInt32(s);

顺便说一下,如果输入对象无法转换,则强制转换和Convert都会抛出异常。但是,如果失败,int.TryParse不会抛出异常;相反,它返回false (但它只接受一个字符串,因此在使用输入对象之前必须对其执行.ToString()操作):

代码语言:javascript
复制
object s = "1";
int i;
if(int.TryParse(s.ToString(), out i))
{
   // i now has a value of 1
}
票数 17
EN

Stack Overflow用户

发布于 2011-02-10 00:26:12

它们从根本上是不同的

强制转换表示该对象是被强制转换到的类型的实例,所以请强制转换它。

Convert表示要转换的类型之间存在转换。

例如,您不能将字符串转换为int类型,但可以将其转换为int类型。由于原语类型的某些内置强制转换规则,或者可以添加到您自己的类型中的显式强制转换,因此存在一些灰色区域/重叠。但一般来说,我不会认为这两个是等同的。

鉴于没有“更好”的选项,您应该使用在给定上下文中有意义的选项。

票数 11
EN

Stack Overflow用户

发布于 2011-02-10 00:25:05

仅当原始类型为新类型定义了强制转换时,才能进行强制转换。因此,从一种数值类型转换为另一种数值类型(例如,long到int)通常是可能的,但从非数值类型转换为数值类型(例如,string到int)通常是不可能的。Convert提供了更多的方法来将这些非数字类型更改为数字类型,所以使用它的原因是您不太可能得到错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4947562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档