为什么使用Convert.ToInt32而非转换?

m.e*_*son 17 .net c# casting

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

int i = (int)object;
Run Code Online (Sandbox Code Playgroud)

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

int i = Convert.ToInt32(object)
Run Code Online (Sandbox Code Playgroud)

Convert.ToInt32()和直接对象之间的区别是什么?

Mar*_*ius 15

并非每个对象都可以直接投射到int.例如,以下内容将无法编译:

string s = "1";
int i = (int)s;
Run Code Online (Sandbox Code Playgroud)

因为string不可隐式转换为int.

但是,这是合法的:

string s = "1";
int i = Convert.ToInt32(s);
Run Code Online (Sandbox Code Playgroud)

作为旁注,Convert如果无法转换输入对象,则转换和抛出异常.但是,int.TryParse如果失败则不抛出; 相反,它返回false(但它只接受一个字符串,所以.ToString()在使用之前你必须输入你的输入对象):

object s = "1";
int i;
if(int.TryParse(s.ToString(), out i))
{
   // i now has a value of 1
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*unt 10

它们根本不同

Casting说该对象是被强制转换为的类型的实例,因此强制转换它.

转换表示转换的类型之间存在转换.

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

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

  • 我认为这是一个意图问题.铸造清楚地说"我知道你是'int`!" 转换说"我不知道你是什么,但最终我知道你会成为一个'int`" (9认同)