【问题标题】:Difference between '(int)a ', 'a as int' and Convert.ToInt32(a) in C# [duplicate]C#中'(int)a','a as int'和Convert.ToInt32(a)之间的区别[重复]
【发布时间】:2014-10-19 13:58:52
【问题描述】:

下面的cast/convert有什么区别。

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

只是想知道这些不同的方法以及在哪里相应地使用它们。

【问题讨论】:

  • 阅读文档怎么样?
  • 注意你不能使用as int,因为它不能为空,它必须是as int?
  • 我假设您在问这个问题之前阅读了文档。当您这样做时,您还必须阅读有关(int)as intConvert.ToInt32() 的特性。那么我们向您提出的问题是:他们有什么不清楚的地方?
  • 所有三个提到的解释都可以在 Jon Skeet 的 Awesome answer 中找到。

标签: c# variables int


【解决方案1】:

(int)a 只是转换为 Int32 类型,并要求 a 为数值(浮点数、长整数等)

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

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

注意事项:

  • as 只能用于可空/引用类型,int 只能用于不可空。使用int?as
  • (int)long 将返回异常,而 long as int? 将返回 null

【讨论】:

  • string as int 不能返回 null 因为它返回的类型必须是int
  • @Chris 来自 MSDN:The as operator is like a cast operation. However, if the conversion is not possible, as returns null instead of raising an exception
  • 从实际尝试该代码:“as 运算符必须与引用类型或可空类型一起使用('int' 是不可为空的值类型)”我假设文档在某处也说过.为了澄清这一点,因为myvar as T 的返回类型是T,如果 T 是 int 则它不能返回 null,因为 int 是一个永远不能为 null 的值类型。
  • @Chris 我的错,没注意到!我通常使用(int)。我会更新我的答案
  • 刚刚还注意到您说“(int)string 将返回异常”,而我认为它实际上是编译时错误...
猜你喜欢
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
相关资源
最近更新 更多