Convert.ToInt32(x)与(int)x相同

时间:2012-08-30 07:27:26

标签: c#

如果x是一个值,那么以下只是语法上的不同但实际上是相同的?第二个是第一个的快捷方式吗?

Convert.ToInt32(x);
(int)x;

或者可以在某些情况下使用它们而不是另一种情况?

MSDN看来,第一个看起来与第二个不同。

6 个答案:

答案 0 :(得分:3)

(int) 显式强制转换,其中Convert.ToInt是方法

考虑:

string x = "1";
int temp = 0;
temp = Convert.ToInt32(x);
temp = (int)x; //This will give compiler error

投放适用于兼容类型

long l = 123;
int temp2 = (int)l;

double d = 123.2d;
int temp3 = (int)d; // holds only the int part 123

您可能会看到Explicit cast - MSDN

  

如果无法在没有丢失信息的风险的情况下进行转换,   编译器要求您执行显式转换   被称为演员。强制转换是一种显式通知编译器的方法   您打算进行转换并且您知道这一点   可能会发生数据丢失。

答案 1 :(得分:2)

除了此处的所有其他帖子,Convert.ToInt32倾向于舍入结果,而int则截断它。

示例:

  float x = -0.6f;
  var b = Convert.ToInt32(x);
  var r = (int)x;

结果是b==-1,bur r==0

这是基本要记住的差异

答案 2 :(得分:1)

如果x是包含数字的字符串,则第一个将成功,但第二个将失败。

object x = "1";
Convert.ToInt32(x); // works
(int)x; // fails

答案 3 :(得分:1)

Convert.ToInt32是一种方法,可将多种类型的对象转换为int(int)为简单转换 - 这可能会导致异常

答案 4 :(得分:1)

他们是不同的。 int是一个转换,ToInt32是一个转换过程。它做得更多,更容忍不正确的数据,并且几乎总是有效。

答案 5 :(得分:1)

对于(int)x,内置于CLR中并要求x为数字变量,否则会产生异常。

Convert.ToInt32旨在成为一种通用转化函数,可将任何基本类型转换为int