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