2014-10-19 125 views
1

以下cast/convert之间的区别是什么?'(int)a','a as int'和C#中的Convert.ToInt32(a)之间的区别

string a = 5; 
int b = (int)a; 
int c = a as int; 
int d = Convert.ToInt32(a); 

只是想知道这些不同的方法和相应地使用它们。

+2

如何阅读文档? – Mephy 2014-10-19 14:01:03

+0

注意你也不能使用'as int',因为它不能为空,它必须是'as int?'。 – Mephy 2014-10-19 14:03:11

+2

我假设你在问这个问题之前阅读了文档。当你这样做的时候,你也必须读懂'(int)','int'和'Convert.ToInt32()'的特性。所以我们对你的问题:他们有什么不清楚的地方? – 2014-10-19 14:03:37

回答

3

(int)a是一个简单的施放到的Int32类型和要求a是一个数字值(浮点型,长等)

Convert.ToInt32(a)将正确转换的任何数据类型为int - 包括string秒 - 而不是仅仅将它转换为另一种类型。

a as int是与(int)a相同的隐式转换(转换),因此它们都做大致相同的事情。

注意要点:

  • as只能与可空/引用类型被使用和不可为空int。使用int?as
  • (int)long会返回一个异常而long as int?将返回null
+0

'string as int' * can not * null,因为它返回的类型必须是'int'。 – Chris 2014-10-19 14:21:09

+0

来自MSDN的@Chris:'as运算符就像一个投射操作。但是,如果转换不可行,则返回null,而不是从实际尝试该代码引发异常' – DividedByZero 2014-10-19 14:27:23

+0

:“as运算符必须与引用类型或可为空类型一起使用('int'是不可为空值类型)“我假设文档也在某处说。澄清这是因为'myvar作为T'的返回类型是'T',如果T是int,那么它不能返回null,因为'int'是一个不能为空的值类型。 – Chris 2014-10-19 14:29:39

相关问题