操做符is或as優於強制轉換類型

在有些時候咱們會使用System.Object類型做爲方法的參數,由於傳入的參數類型可能不明確,在使用中又須要把這些參數轉換爲其它類型,那麼就必需進行類型轉換了,類型轉換有兩種方法,一種是使用as操做符,一種是使用C風格的強制轉換,另外還有種比較安全的作法,即先使用is來作一個轉換測試,而後再使用as或強制轉換。
public static void transfer(object o)
{
    //as操做符
     MyType t = o as MyType;
     t = (MyType)o;
    if (t != null)
     {
        //t成功轉換爲MyType
     }
    else
     {
        //轉換失敗
     }
    //強制轉換
    try
     {
         MyType t;
         t = (MyType)o;
        if (t != null)
         {
            //t成功轉換爲MyType
         }
        else
         {
            //轉換失敗
         }
     }
    catch { }
}
上面的例子中能夠看出,使用as時代碼更簡單,並且不用try/catch語句。
as操做符不能用於值類型,as操做符在不能經過轉換時將返回null,但由於值類型不能夠爲null,因此as不能用於值類型,值類型包括int, bool等
object o = Factory.GetObject();
int i = o as int;//不能經過編譯
值類型不能使用as,那麼就只好用強制類型轉換了,但仍是能夠精簡一些,咱們能夠使用is操做符來避免生成異常拋出,可是須要注意的是隻有在不能使用as時才使用is,不然使用is將會帶來代碼的冗餘。
Object o = Factory.GetValue();
int i = 0;
if(o is int) i = (int)o;
冗餘代碼的例子:
Object o = Factory.GetObject();
MyType t = null;
If(o is MyType) //使用as不會產生異常,因此不用使用is
t = o as MyType;

object o = Factory.GetObject();
MyType t = null;
If((o as MyType) != null)
t = o as MyType;
相關文章
相關標籤/搜索