as:用于检查在兼容的引用类型之间执行某些类型的转换;
//举例
Employee myEmployee = myObject as Employee;
if (myEmployee != null) { }
在这段代码中,CLR核实myObject是否兼容于Employee类型;如果是,as会返回对同一个对象的一个非null的引用。如果myObject不兼容于Employee类型,as运算符会返回null。
注意:as运算符造成CLR只校验一次对象的类型。
as运算符的工作方式与强制类型转换一样,只是它永远不会抛出一个异常。相反,如果对象不能转换,结果就是null。所以,正确的做法是检查最终生成的一引用是否为null。如果企图直接使用最终生成的引用,会抛出一个System.NullReferenceException异常。如下例所示:
Object obj = new Object(); //新建一个Object对象。
Employee e = obj as Employee; //将obj转型为一个Employee
e.ToString(); //访问e会抛出一个NullReferenceException异常
注意:as运算符只执行引用转换和装箱转换。as运算符无法执行其它转换,如果用户定义的转换,这类转换应使用强制转换表达式来执行。
C#类型转换总结
Object ==> 已知引用类型——使用as操作符完成;
Object ==> 已知值类型——先使用is操作符来进行判断,再用类型强转换方式进行转换;
已知引用类型之间转换——首先需要相应类型提供转换函数,再用类型强转换方式进行转换;
已知值类型之间转换——最好使用系统提供的Conver类所涉及的静态方法。