C#中as与is的用法

时间:2022-08-28 00:27:03
一、类型转换   
1.任何类型都可以转换为其基类类型,用隐式转换完成;  

2.任何类型转换为其派生类型时,必须进行显示转换。如:(类型名)对象名;  

3.使用GetType可以取得任何对象的精确类型;  

4.基本类型可以使用Convert类实现类型转换;  

5.除了string以外的其他类型都有Parse方法,用于将字符串类型转换成对应的基本类型;  

6.值类型和引用类型的转换称为装箱(boxing)或拆箱(unboxing);   

二、is/as示例   
is转换规则:   
1. 检查对象类型的兼容性,并返回结果true(false);  2.不会抛出异常;  

3.如果对象为null,刚返回false;   

示例:  C#代码 

1. object o = "abc";    

2. if (o is string) //执行第一次类型兼容性检查    

3. {    

4.     string s = (string)o; //执行第二次类型兼容性检查,并转换    

5.     MessageBox.Show("转换成功!");    

6. }    

7. else  

 8. {    

9.     MessageBox.Show("转换失败!");    

10. }     

as转换规则:   
1.检查对象类型的兼容性,并返回转换结果,如果不兼容则返回null;  2.不会抛出异常;  
3.如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常;   示例:  

C#代码  
1. object o = "abc";    

2. string s = o as string; //执行第一次类型兼容性检查,并返回结果    

3. if (s != null)     

4.     MessageBox.Show("转换成功!");    

5. else   

6.     MessageBox.Show("转换失败!");     

注:as比is少执行一次兼容性检查,性能可能会高一点点。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检查要比类型兼容检查快。