天天看點

C# AS與Is

在C#中,所有的東西都是對象。是以任何常數也是一個整型對象。這裡用到了as,as是C#語言裡面的一個關鍵字。as運算符類似于類型轉換,所不同的是,當轉換失敗時,as運算符将産生空,而不是引發異常。在形式上,這種形式的表達式:

expression as type

as 運算符隻執行引用轉換和裝箱轉換。

as 運算符無法執行其他轉換,如使用者定義的轉換,這類轉換應使用case表達式來代替其執行

關于is的其實也差不多,隻是IS不會幫你進行任何的轉換。是以需要自已進行顯示轉換

is操作符進行轉換,它自動檢查時局是否和類型相容,并傳回結果。而且它不會抛出異常。如果對象引用為null,則is總傳回false。

       if (cls1 is Class2) 

        {

          Class2 cls2 = (Class2)cls1;

        }

       else

          System.Console.WriteLine("Error 2!");

as操作符進行轉換:

            Class2 cls2 = cls1 as Class2;

            if (cls2!=null)

               System.Console.WriteLine("Ok");

            else

               System.Console.WriteLine("Error!");

     對比兩種方式,is需要做兩次對象的類型檢查,而as需要做一次對象類型檢查,再加一次null的檢查,而null檢查開銷比對象類型檢查少。相對as的方法效率高些,現在明白了is與as的用處了,主要是類型的轉換和判斷,如果隻是檢測類型是否相符那麼隻用is就可以了,如果要進行類型轉化可以直接用as。其實可以直接進行強制轉換,隻是當類型不符合時會出錯,這是可以利用try{} catch(){} 來進行,但抛出的異常時什麼呢?

類型轉換 

1.任何類型都可以轉換為其基類類型,用隐式轉換完成;

2.任何類型轉換為其派生類型時,必須進行顯示轉換。如:(類型名)對象名;

3.使用GetType可以取得任何對象的精确類型;

4.基本類型可以使用Convert類實作類型轉換;

5.除了string以外的其他類型都有Parse方法,用于将字元串類型轉換成對應的基本類型;

6.值類型和引用類型的轉換稱為裝箱(boxing)或拆箱(unboxing);

二、is/as示例

is轉換規則:

1. 檢查對象類型的相容性,并傳回結果true(false);

2.不會抛出異常;

3.如果對象為null,剛傳回false;

示例:

C#代碼 

  1. object o ="abc";
  2. if(oisstring) //執行第一次類型相容性檢查   
  3. {
  4. string s = (string)o; //執行第二次類型相容性檢查,并轉換   
  5. MessageBox.Show("轉換成功!");   
  6. }
  7. else
  8. {
  9. MessageBox.Show("轉換失敗!");   

}

as轉換規則: 

1.檢查對象類型的相容性,并傳回轉換結果,如果不相容則傳回null; 

2.不會抛出異常; 

3.如果結果判斷為空,則強制執行類型轉換将抛出NullReferenceException異常; 

示例:C#代碼 

  1. object o ="abc";
  2. string s = oasstring;//執行第一次類型相容性檢查,并傳回結果   
  3. if(s !=null)
  4. MessageBox.Show("轉換成功!");

    else

    MessageBox.Show("轉換失敗!");

簡記:

Is是先進行 相容性檢查再進行顯式轉換,As是執行一次類型相容性檢查,并傳回結果