显式的转换可能会抛出异常,而异常的代价在运行时是高昂的。C#有两个操作符(as和is)可以解决这个问题,它们都保证不抛出异常。
is:表示是否能将一个给定的表达式转换为给定的类型,这种转换可能是引用转换,也可能是装箱或拆箱操作,其结果为布尔型。
例: string strName="Davi";
Console.WriteLine("strName {0} string", strName is String? "is","isnot"); //结果为:strName is String
Console.WriteLine("strName {0} object", strName is Object ? "is","isnot"); //结果为:strName is object
注:is不考虑任何基于用户自定义类型的转换。
as:类似于is操作符,但它会返回一个目标类型的引用。as在不能做转换时返回null。
例: MyType myObj1=new MyType();
MyBaseType baseOjb1=new MyBaseType();
MyBaseType baseOjb2=myObj;
MyType myObj2=baseOjb2 as MyType; //成功转换为MyType
myObj2=baseOjb1 as MyType; //失败,myObj2=null
小结:如果需要测试一个变量是否为某种类型,用is 。
如果要将一个变量转换为某种类型,用as 。如果用is的话,需要进行两次类型查找操作(先判断,再转换),而as只需要一次。