is as運算符

is

在C#中有些轉換時不成功的,並且在運行時拋出一個InvalidCastException異常,我們可以使用is運算符來檢查轉換是否會成功完成,從而避免盲目嘗試轉換,表達式:Expr is TargetType  Expr是源表達式,TargetType是目標類型,返回值爲bool,可以成功轉換則返回true,否則返回falseis運算符只可以用於引用轉換以及裝箱、拆箱轉換,不能用於用戶自定義轉換

    class A
    {
        public int a = 10;
    }
    class B : A { }
    class Program
    {
        static void Main(string[] args)
        {
            B b = new B();
            A a;
            if(b is A)  //檢測變量b是否能轉換爲A類型
            {
                a = b;
                Console.WriteLine(a.a);  //10
            }
        }
    }

is直接定義變量

namespace lianxi2
{
    class A
    {
        public int a = 10;
    }
    class B : A { }
    class Program
    {
        static void Main(string[] args)
        {
            B b = new B();
            if (b is A b1)  //檢測變量b是否能轉換爲A類型,如果可以則生成b對應類型的變量b1
            {
                Console.WriteLine(b1.GetType());  //lianxi2.B
            }
        }
    }
}

as

as運算符和強制轉換運算符類似,只是它不拋出異常,如果轉換失敗,它返回null而不是拋出異常,表達式:Expr as TargetType,由於as運算符返回引用表達式,它可以用作賦值操作中的源。與is運算符類似,as運算符只能用於引用轉換和裝箱轉換,不能用於用戶自定義轉換或到值類型的轉換。

    class A
    {
        public int a = 10;
    }
    class B : A { }
    class Program
    {
        static void Main(string[] args)
        {
            B b = new B();
            A a;

            a = b as A;   //將b轉換爲A類型,並且賦值給一個A類型的變量a
            if (a != null)   //使用它之前應該檢查a是否爲null
                Console.WriteLine(a.a); //10
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章