as 运算符类似于类型转换,所不同的是,当转换失败时,as运算符将产生空,而不是引发异常。在形式上,这种形式的表达式: expression_r as type as运算符只执行引用转换和装箱转换。 as运算符无法执行其他转换,如用户定义的转换,这类转换应使用case表达式来代替其执行。 关于is的其实也差不多,只是IS不会帮你进行任何的转换。所以需要自已进行显示转换。 is操作符进行转换,它自动检查时局是否和类型兼容,并返回结果。而且它不会抛出异常。如果对象引用为null,则is总返回false。
is例子:
if (cls1 is Class2) Class2 cls2 = (Class2)cls1; else System.Console.WriteLine("Error 2!");
as例子:
Class2 cls2 = cls1 as Class2; if (cls2!=null) System.Console.WriteLine("Ok"); else System.Console.WriteLine("Error!");