the comparison between as and cast
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Direct casting vs 'as' operator?
有人能比较as和cast吗?
如果要强制转换的对象不是所请求的类型,则直接强制转换将失败。
1 2 |
然而:
1 2 |
当要强制转换的对象是您要强制转换的类型时,两种语法的结果都相同:对象被成功强制转换。
请特别注意,您应该避免使用"as and invoke"模式:
1 | (something as SomeType).Foo(); |
因为如果强制转换失败,您将抛出一个NullReferenceException而不是ClassCastException。这可能会导致你追查为什么
1 | ((SomeType)something).Foo(); |
当
"as"不引发异常,如果强制转换失败,则返回空值。
其工作原理与此代码类似:
1 2 3 4 5 6 7 8 | if (objectForCasting is CastingType) { result = (CastingType)objectForCasting; } else { result = null; } |
好的做法是使用as语句后使用检查是否为空:
1 2 3 4 5 6 7 8 9 10 | CastingType resultVar = sourceVar as CastingType; if (resultVar == null) { //Handle null result here... } else { // Do smth with resultVar... } |
执行显式强制转换与使用as运算符有三个主要方面的不同。
作为操作员…