C# is和as关键字使用区别
关于类型的判断和转换有is和as这2个操作符。
1、使用AS运算符进行类型转换.
2、先使用IS运算符判断类型是否可以转换,再使用()运算符进行显示的转换.
IS运算符:
IS运算符用于检查对象是否与给定类型兼容,并不进行实际的转换。如果判断对象引用为null,则返回false。由于仅仅判断是否兼容,因此不会抛出异常。使用范围,只适用于引用类型转换、装箱转换和拆箱转换,而不支持值类型转换。
AS运算符:
AS运算符用于在两个应用类型之间进行转换,如果转换失败则返回null,并不抛出异常,因此转换是否成功可以通过结果是否为null进行判断,并且只有在运行时才能判断。AS运算符有一定的适用范围,他只适用于引用类型或可以为null的类型。
在实际工作中尽量使用AS运算符,而少使用()运算符的显示转换的理由:
1、无论是AS和IS运算符,都比直接使用()运算符强制转换更安全。
2、不会抛出异常,免除使用try···catch进行异常捕获的必要和系统开销,只需要判断是否为null。
3、使用AS比使用IS性能更好(C#4.0权威指南上这么说)。
使用is会检查两次对象的类型,一次是核实,一次是强制转换。使用as只进行了一次对象类型的检查。检查对象的类型,是个耗费资源的操作,首先要判断对象的实际类型,然后必须遍历继承树结构(层次结构),去与每个基类核对。
using System; namespace is_as关键字 { class Program { static void Main(string[] args) { Person a = new Student();//声明一个学生类,赋值给人类 Person b = new Student();//声明一个学生类,赋值给人类 #region is关键字 if (a is Student)//判断 a 是不是学生类,返回true或false { Student s = (Student)a;//显式转换 Console.WriteLine("a 是学生类。"); } else { Console.WriteLine("a 不是学生类。"); } #endregion #region as关键字 Student ss = b as Student;//将 b 转换成 学生类,如果转换失败,则返回 null。 if (ss != null)//判断 ss 不为null { Console.WriteLine("b 是学生类。"); } else { Console.WriteLine("b 不是学生类。"); } #endregion Console.ReadKey(); } } class Person //人类 { } class Student : Person//学生类,继承 人类 { } }
输出结果:
以上内容节选自《CSDN》.