一、C#中的is
检查一个对象是否兼容于其他指定的类型,并返回一个Bool值,如果一个对象是某个类型或是其父类型的话就返回为true,否则的话就会返回为false。永远不会抛出异常
如果对象引用为null,那么is操作符总是返回为false,因为没有对象可以检查其类型。
二、C#中as的转换规则
1、检查对象类型的兼容性,并返回转换结果,如果不兼容则返回null;
2、不会抛出异常;
3、如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常;
4、用as来进行类型转换的时候,所要转换的对象类型必须是目标类型或者转换目标类型的派生类型
三、as与is的区别
1、AS在转换的同事兼判断兼容性,如果无法进行转换,则 as 返回 null(没有产生新的对象)而不是引发异常。有了AS我想以后就不要再用try-catch来做类型转换的判断了。因此as转换成功要判断是否为null。
2、AS是引用类型类型的转换或者装箱转换,不能用与值类型的转换。如果是值类型只能结合is来强制转换
3、IS只是做类型兼容判断,并不执行真正的类型转换。返回true或false,不会返回null,对象为null也会返回false。
4、AS模式的效率要比IS模式的高,因为借助IS进行类型转换的化,需要执行两次类型兼容检查。而AS只需要做一次类型兼容,一次null检查,null检查要比类型兼容检查快。
参考资料:C#中is、as的区别 http://www.studyofnet.com/news/351.html