2

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

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

还是可以在某些情况下使用其中一种?

MSDN中,似乎第一个做的事情与第二个不同。

4

6 回答 6

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

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

于 2012-08-30T07:30:43.270 回答
2

除了这里的所有其他帖子之外,这Convert.ToInt32往往会舍入结果,而 会int截断它。

例子:

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

这样做的结果是b==-1, bur r==0

这是要记住的根本区别

于 2012-08-30T07:33:24.227 回答
1

For (int)x, 内置在 CLR 中并要求它x是一个数字变量,否则将给出异常。

Convert.ToInt32被设计成一个通用的转换函数,可以从任何原始类型转换为int.

于 2012-08-30T07:32:29.227 回答
1

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

object x = "1";
Convert.ToInt32(x); // works
(int)x; // fails
于 2012-08-30T07:29:19.837 回答
1

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

于 2012-08-30T07:29:51.437 回答
1

它们不一样。int 是一个强制转换,ToInt32 是一个转换过程。它做得更多,更能容忍不正确的数据,而且几乎总是有效的。

于 2012-08-30T07:30:38.730 回答