以下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);
只是想知道这些不同的方法和相应地使用它们。
以下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);
只是想知道这些不同的方法和相应地使用它们。
(int)a
是一个简单的施放到的Int32类型和要求a
是一个数字值(浮点型,长等)
Convert.ToInt32(a)
将正确转换的任何数据类型为int - 包括string
秒 - 而不是仅仅将它转换为另一种类型。
a as int
是与(int)a
相同的隐式转换(转换),因此它们都做大致相同的事情。
注意要点:
as
只能与可空/引用类型被使用和不可为空int
。使用int?
与as
(int)long
会返回一个异常而long as int?
将返回null
'string as int' * can not * null,因为它返回的类型必须是'int'。 – Chris 2014-10-19 14:21:09
来自MSDN的@Chris:'as运算符就像一个投射操作。但是,如果转换不可行,则返回null,而不是从实际尝试该代码引发异常' – DividedByZero 2014-10-19 14:27:23
:“as运算符必须与引用类型或可为空类型一起使用('int'是不可为空值类型)“我假设文档也在某处说。澄清这是因为'myvar作为T'的返回类型是'T',如果T是int,那么它不能返回null,因为'int'是一个不能为空的值类型。 – Chris 2014-10-19 14:29:39
如何阅读文档? – Mephy 2014-10-19 14:01:03
注意你也不能使用'as int',因为它不能为空,它必须是'as int?'。 – Mephy 2014-10-19 14:03:11
我假设你在问这个问题之前阅读了文档。当你这样做的时候,你也必须读懂'(int)','int'和'Convert.ToInt32()'的特性。所以我们对你的问题:他们有什么不清楚的地方? – 2014-10-19 14:03:37