as与is用法总结
1 is关键字
is关键字检查对象是否与给定类型兼容。
例如:
Object obj=new Object();if (obj is string){}代码中检查obj 对象是否与类型string兼容。
示例代码:
public class Student{ public string Name { get; set; } public string Class { get; set; } public float Score { get; set; }}public class Teacher{ public string Name { get; set; } public string Course { get; set; }}static void Main(string[] args){ Student student = new Student(); Teacher teacher = new Teacher(); Test(student); Test(teacher); Test("Wolf");}static void Test(object obj){ if (obj is Student) { Student student = (Student)obj; Console.WriteLine("I'm a Student"); } else if (obj is Teacher) { Teacher teacher = (Teacher)obj; Console.WriteLine("I'm a Teacher"); } else { Console.WriteLine("I'm not a Teacher,not a Student,and I'm not a Person"); }}Test方法中对传入对象使用is关键字判断其是否与指定类型兼容,兼容则进行指定操作。
运行结果如下:

对象与给定类型兼容又该怎样理解呢?
“兼容”表示对象是该类型,或者派生于该类型。
关于这一点,下面做个简单实验。
在前面示例代码的基础上,增加两个类Person及LittleStudent,且Student类继承自Person类。
public class Person{}public class LittleStudent:Student{}public class Student:Person{ //其他代码不变}Object obj = new Object();Person person = new Person();Student student = new Student();Teacher teacher = new Teacher();LittleStudent lstudent = new LittleStudent();if (obj is Student) //falseif (person is Student) //falseif (student is Student)//trueif (teacher is Student)//falseif (lstudent is Student)//true
2 as关键字
as关键字用于在兼容的引用类型之间执行转换。类似于强制转换操作;如果转换不可行,as 会返回 null 而不会引发异常。
等效于:
expression is type ? (type)expression : (type)null
例如:
代码片段1:
Object obj = new Object();Student s = obj as Student ;if(s != null){ //做你想做的}代码片段1等价于:
代码片段2:
Object obj = new Object();if (obj is Student){ Student student = (Student)obj;}在上面两种方式中,后一个版本进行了两次类型检测,效率较低。
3 写在后面:
is 运算符只考虑引用转换、装箱转换和取消装箱转换。不考虑其他转换,如用户定义的转换。