如果 x 是一个值,那么以下只是语法不同但实际上相同吗?第二个是第一个的捷径吗?
Convert.ToInt32(x);
(int)x;
还是可以在某些情况下使用其中一种?
在MSDN中,似乎第一个做的事情与第二个不同。
(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
如果无法在没有丢失信息的风险的情况下进行转换,则编译器会要求您执行显式转换,这称为强制转换。强制转换是一种明确通知编译器您打算进行转换并且您知道可能会发生数据丢失的方式。
除了这里的所有其他帖子之外,这Convert.ToInt32
往往会舍入结果,而 会int
截断它。
例子:
float x = -0.6f;
var b = Convert.ToInt32(x);
var r = (int)x;
这样做的结果是b==-1
, bur r==0
。
这是要记住的根本区别
For (int)x
, 内置在 CLR 中并要求它x
是一个数字变量,否则将给出异常。
Convert.ToInt32
被设计成一个通用的转换函数,可以从任何原始类型转换为int
.
如果x
是一个包含数字的字符串,第一个将成功,但第二个将失败。
object x = "1";
Convert.ToInt32(x); // works
(int)x; // fails
Convert.ToInt32是一种方法,它将多种类型的对象转换为int
,并且(int)
是简单的强制转换 - 这可能会导致异常
它们不一样。int 是一个强制转换,ToInt32 是一个转换过程。它做得更多,更能容忍不正确的数据,而且几乎总是有效的。