System.Convert.ToInt vs(int)

我在另一篇文章中注意到有人做了类似的事情:

double d = 3.1415; int i = Convert.ToInt32(Math.Floor(d)); 

他们为什么使用转换函数,而不是:

 double d = 3.1415; int i = (int)d; 

它有一个隐含的底层和转换。

另外,更关注的是,我在一些生产代码中注意到我正在阅读:

 double d = 3.1415; float f = Convert.ToSingle(d); 

是这样的:

 float f = (float)d; 

是否所有这些隐式转换只是在Convert类中是为了完整性,还是它们是否有用? 我可以理解需要.ToString(),但不是其他的。

转换为int是隐式截断,而不是隐式地板:

 double d = -3.14; int i = (int)d; // i == -3 

我选择Math.Floor或Math.Round来使我的意图更明确。

舍入的处理方式也不同:

x = -2.5(int)x = -2 Convert.ToInt32(x)= – 2
x = -1.5(int)x = -1 Convert.ToInt32(x)= – 2
x = -0.5(int)x = 0 Convert.ToInt32(x)= 0
x = 0.5(int)x = 0 Convert.ToInt32(x)= 0
x = 1.5(int)x = 1 Convert.ToInt32(x)= 2
x = 2.5(int)x = 2 Convert.ToInt32(x)= 2

注意x = -1.5和x = 1.5的情况。
在某些算法中,使用的舍入方法对于获得正确答案至关重要。

当您有一个要转换为int的字符串时,可以使用Convert

 int i = Convert.ToInt32("1234"); 

转换和转换如果失败则抛出exception。

即,这仍然会抛出exception,它不会返回0:

 Convert.ToInt32("1234NonNumber"); 

在许多情况下,转换和转换将具有相同的结果,但转换通常更容易阅读。

Convert.ToInt32()用于字符串( http://msdn.microsoft.com/en-us/library/sf1aw27b.aspx ),而转换只能用于具有内部转换器(数字类型)的类型。 真正的诀窍是在Int32.Parse和Convert.ToInt32()之间做出决定。 Convert.ToInt32()容忍null参数并返回0,而Int32.Parse()将抛出ArgumentNullException。