Effective C#读书笔记(3)as、is、cast类型转换

 
C#是一种强类型语言。很多情况下,我们都要进行类型转换(比如传递函数参数的时候),类型转换的方式有两种,一是使用C#提供的as操作符,一是沿用以前的cast方式。相比之下,as操作符不仅更加安全,不会抛出异常,而且对于程序的运行来说效率更高。
 
★ 例如,我们想把一个object类型的变量转换为MyType类型,使用as操作符这样写:
object o = Factory.GetObject( );
// Version one:
MyType t = o as MyType; 
if ( t != null )
{
 // work with t, it's a MyType./
}else
{
 // report the failure.
}
 
使用强制类型转换这样写:
object o = Factory.GetObject( );
// Version two:
try {
 MyType t;
 t = ( MyType ) o;
 if ( t != null )
 {
// work with T, it's a MyType
 }
else
 {
    // Report a null reference failure.
 }
}
catch
{
 // report the conversion failure.
}
       由上可见,使用as操作符书写的代码更加简洁清楚。
 
      ★ 使用as和cast在基类和派生类之间转换也有不同,定义两个类,基类Father和派生类Son,试验如下——
1)以下代码抛出异常
       Father f = new Father();
       object rr = f;
       Son s = (Son)f;
2)以下代码无异常,但s为null
       Father f = new Father();
       object rr = f;
       Son s = f as Son;
3)以下代码成功完成转换
       Father f = new Son();
       object rr = f;
      Son s = f as Son;
4)以下代码同上,成功转换
       Father f = new Son();
      object rr = f;
      Son s = (Son)f;
 
       ★ 但是as操作符不能用于值类型的变量,如下面的写法是错误的:
       object o = Factory.GetValue( );
       int i = o as int; // Does not compile
 
       ★ 再说is关键字。is是判断变量是否为一个类型的操作符,通常as无法使用时才使用is。比如:
object o = Factory.GetValue( );
int i = 0;
try
{
      i = ( int ) o;
}
catch
{
      i = 0;
}
       如下is用法就是多余的:
       object o = Factory.GetObject( );
       MyType t = null;
       if ( o is MyType )
        t = o as MyType;
 
       ★ 另外:今天在CSDN上看到有人贴了TryParse和Parse的效率比较问题(10倍左右),TryParse方法主要是.Net2.0提供的,而Effective C#主要针对1.X版本,没有提及。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值