C#中 As 和强制转换的总结

本文总结了C#中使用as操作符和强制类型转换的区别。建议尽量使用as操作符,因其安全且效率高。as操作符在转换失败时返回null,而强制转换失败会抛出异常,因此在使用强制转换时需要处理异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

C#是一门强类型语言,一般情况下,我们最好避免将一个类型强制转换为其他类型,但有些时候难免要进行类型转换。先想想究竟哪些操作可以进行类型转换(先不考虑.NET提供的Parse),一般我们都有以下选择:

  • 使用as操作符转换,
  • 使用传统C风格的强制转型,
  • 使用is来做一个转换测试,然后再使用as操作符或者强制转换。

正确的选择应该是尽可能地使用as操作符,因为它比强制转型要安全,而且在运行时层面也有比较好的效率(注意的是as和is操作符都不执行任何用户自定义的转换,只有当运行时类型与目标转换类型匹配时,它们才会转换成功)。

现在我们通过一个简单的例子说明as和强制转换之间的区别,首先我们定义一间获取不同类型对象的工厂,然后我们把未知类型转换为自定义类型。

 
  1. object o = Factory.GetObject();   
  2. MyType t = o as MyType;   
  3. if (t == null) { //转换成功 }   
  4. else { //转换失敗 }   
  5. object o = Factory.GetObject();   
  6. try { MyType t = o as MyType;   
  7. if (t != null)   
  8. ////转换成功   
  9. }   
  10. else   
  11. {   
  12. ////转换失敗   
  13. }   
  14. }   
  15. catch   
  16. ////异常处理  
  17.  } 

通过上述代码我们发现as类型转换失败时值为null不抛出异常,但强制转换如果转换失败会抛出异常所以我们要添加异常处理。

上一页 1 2 3  下一页
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值