c# -- is和as运算符
一、is运算符用于判断一个对象是否可以转换为指定的类型,不会抛出异常,返回bool值用来表示是否转换成功: if (myObj is MyClass) { //do... } 当满足以下任意一种情况时转换成功: 1.转换对象是目标类型的实例; 2.转换对象是派生自目标类型的类型的实例; 3.转换对象是实现目标接口的类型的实例; 在C#7.0以上版本中支持is模式匹配表达式和switch模式匹配表达式; 二、as运算符与强制转换类似,但不会抛出异常,如果转换不成功,会返回null,通常搭配判空操作一起使用: MyClass myObj = obj as MyClass; if (myObj != null) { //do... } 1.as运算符仅可以用于目标类型为引用类型或可空类型的类型转换操作,在转换时一般不会创建新的对象(如果原对象为值类型且目标类型为引用类型,转换成功时则会产生装箱操作,产生新对象);对于目标类型为非可空类型的值类型,可以使用is运算符配合强制转换进行转换: if (myObj is int) { int myNum = (int)myObj; //do... } ※在泛型中,如果需要使用as运算符将对象转换为类型参数的类型,需要添加基类约束或类类型的约束: where T : BaseClass //指定基类约束 where T : class //指定类类型约束 2.is和as运算符都不会执行自定义的类型转换(此时应该使用强制转换),它们仅当被转换对象的运行时类型符合目标类型转换规则时(即上面的几种情况)才能转换成功; ※较于强制转换,应该尽可能的使用as运算符,因为使用as运算符进行转换更加安全,也更加高效; ? 如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的认可是我写作的最大动力! 作者:Minotauros 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |