《Effective C#》读书笔记(3)

        Item 3: Prefer the is or as Operators to Casts

        第3项: 优先使用is/as进行类型转换

        由于C#是强类型的语言,我们要尽量避免类型的转换。但是有时转换是无法避免的,这时我们要优先使用is/as来进行类型的转换,避免使用强制的类型转换。
       asis操作符并不能进行所有的用户定义的类型转换, 只有当runtime类型和目标类型一致时转换操作才会成功.它们永远不会为了满足程序调用请求而创建一个新的object,这样就使类型转换更加的安全。
        让我们先来看看is操作符。is操作符可以检查对象是否和指定的类型兼容,并返回判断结果。is操作符永远不会抛出异常。
       

Object o = new Object();
Boolean b1 
= (o is Object);  //b1为true
Boolean b2 = (o is Person);  //b2为false


        is操作符为我们检查类型的兼容性,而as操作符提供类型的转型方式,它可以简化代码的同时提高性能。

object o = Factory.GetObject( );

MyType t 
= o as MyType;

if ( t != null )
{
  
// work with t, it's a MyType.
else
{
  
// report the failure.
}


        在上面的代码CLR会检查o所引用的对象是否和MyType兼容。如果兼容,as返回一个指向同一个对象的非空指针。如果不兼容,as返回null。但是要注意,as不能用于值类型的转换,否则返回null。

posted @ 2005-08-13 13:44  jierry  阅读(747)  评论(0编辑  收藏  举报