这个问题已经在这里有了答案 :
7年前关闭。
可能重复: 投放与在CLR中使用’as’关键字
我最近了解了一种不同的投射方式。而不是使用
SomeClass someObject = (SomeClass) obj;
可以使用以下语法:
SomeClass someObject = obj as SomeClass;
如果obj不是SomeClass,则似乎返回null,而不是引发类强制转换异常。
我看到如果强制转换失败并且我尝试访问someObject变量,则可能导致NullReferenceException。所以我想知道这种方法的原理是什么?为什么要使用这种转换方式而不是(旧的)转换方式- 似乎只能将失败的“更深层”转换问题转移到代码中。
使用“经典”方法,如果强制转换失败,InvalidCastException则会引发an 。使用该as方法,结果为null,可以对其进行检查,并避免引发异常。
InvalidCastException
as
null
另外,您只能使用as引用类型,因此,如果将类型转换为值类型,则仍必须使用“经典”方法。
注意:
该as方法只能用于可以分配null值的类型。这种用法仅表示引用类型,但是当.NET 2.0出现时,它引入了可为空的值类型的概念。由于可以为这些类型分配一个null值,因此可以与as运算符一起使用。