Item 3: Prefer the is or as Operators to Casts

(一)好的编程习惯总是在可以避免强制类型转换的时候就去避免。但是很多时候我们不得不去做一些类型转换,所以这个时候用上AS和IS比强制转换要安全,效率也凑合。直接看实例:

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.

}

第二种显然比较糟糕,不仅需要try…catch… ,还需要check是否是null. (因为null能被强制转换为任意引用类型)

记住:在任何可以用as的情况下用as。


(二) 说了一大堆as 的好处,但是有些情况下是不能用as来转换的。

object o = Factory.GetValue( ); int i = o as int; // Does not compile.

会导致编译无法通过,因为值类型无法为NULL。

这个时候你可能感觉要抓狂了,不得不采用如下的写法:

object o = Factory.GetValue( );

int i = 0;

try {

  i = ( int ) o;

} catch

{

  i = 0;

}

事实上,我们脑子没有被门夹,可以用is.

object o = Factory.GetValue( );

int i = 0;

if ( o is int )

  i = ( int ) o;

记住:is 只有在as无法使用的情况下才使用,如果同时用上去,那就是浪费。

你可能感兴趣的:(Opera)