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
}
}