如果x是一个值,那么以下只是语法上的不同但实际上是相同的?第二个是第一个的快捷方式吗?
Convert.ToInt32(x);
(int)x;
或者可以在某些情况下使用它们而不是另一种情况?
在MSDN看来,第一个看起来与第二个不同。
答案 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
。