Effective C#阅读笔记-3使用is或者as代替cast做类型转换

C#是强类型语言,好的编程习惯应该尽量避免类型的转换。但是很多时候我们很难避免需要将一个类型强制转换为另外一个类型,例如很多函数都是以Object对象作为参数的,这个时候就需要类型的向下转换。


1.使用is或者as操作符,是安全的不会抛出异常,运行时也会更加的高效。is或者as操作符永远不会执行用户自定义的类型转换,只有在转换类型匹配的情况下,转换才会成功。在转换过程中,也不会创建新的对象来实现转换。

public class SecondType
{
    private MyType _value;

    // other details elided

   // Conversion operator.
   // This converts a SecondType toa MyType
   public static implicit operator MyType( SecondType t )
   {
        return t._value;
   }
}

// o is a SecondType:

object o = Factory.GetObject( );

// 因为O不是SecondType
//由于as不会进行用户自定义转换,检查转换类不匹配,所以转换会失败;
MyType t = o as MyType;

// Version three:下面这个情况转换会成功
SecondType st = o as SecondType;

try {
   MyType t;
   t = ( MyType ) st; //调用用户自定义的转换,转换会成功
   if ( t != null )
   {
        // work with T, it's a MyType.
   } else
   {
        // Report a null reference failure.
   }
} catch
{
    // report the failure.
}

3. as不能用来转换值类型,因为值类型不能为null,但是可以用is来检测是不是对应的值类型。

4.foreach循环中,需要用cast来支持值类型和引用类型,用于 IEnumerator.Current返回的是System.Object类型,所以也是无法在foreach中执行用户自定转换的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值