C#中數據類型的安全轉換(is,as)

        下面代碼中,不能裝箱,在強制類型轉換時出錯,因爲之前 c 是 class 類型,而卻要把它轉換爲 int 類型,這是不可以的。雖然編譯器能通過編譯,但是 runtime 在運行時會拋出 InvalidCastException 異常。

    Circle c = new Circle(8);
    object o = c;   // 本條語句正確,但是不會裝箱,因爲裝箱是從棧到堆,需要的是值類型,而 c 是引用類型
    int i = (int)o; // 編譯成功 
                    // 編譯器編譯通過,但是運行時 runtime 會拋出一個 InvalidCastException

        is 和 as 是 C# 提供的以安全的方式執行類型強制轉換的操作符,用法如下。

        is 操作符驗證對象的類型是不是自己希望的。

    WrappedInt wi = new WrappedInt();
    object o = wi;
    if (o is WrappedInt)
    {
        WrappedInt temp = (WrappedInt)o;    // 轉型是安全的,o 已確定是一個 WrappedInt
    }
        as 操作符取一個對象和一個類型作爲其左邊和右邊的操作數。runtime 會嘗試將對象轉換成指定的類型,若轉換成功,就返回轉換成功後的結果給 temp,如果轉換失敗,返回 null 給 temp。

    WrappedInt wi = new WrappedInt();
    object o = wi;
    WrappedInt temp = o as WrappedInt;    // 轉型是安全的,o 已確定是一個 WrappedInt
    if (temp != null)
    {
        // 只有轉換成功,這裏的代碼才能被執行
    }

發佈了51 篇原創文章 · 獲贊 17 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章