一尘不染

C#as强制转换与经典强制转换

c#

这个问题已经在这里有了答案

7年前关闭。

可能重复:
投放与在CLR中使用’as’关键字

我最近了解了一种不同的投射方式。而不是使用

SomeClass someObject = (SomeClass) obj;

可以使用以下语法:

SomeClass someObject = obj as SomeClass;

如果obj不是SomeClass,则似乎返回null,而不是引发类强制转换异常。

我看到如果强制转换失败并且我尝试访问someObject变量,则可能导致NullReferenceException。所以我想知道这种方法的原理是什么?为什么要使用这种转换方式而不是(旧的)转换方式-
似乎只能将失败的“更深层”转换问题转移到代码中。


阅读 339

收藏
2020-05-19

共1个答案

一尘不染

使用“经典”方法,如果强制转换失败,InvalidCastException则会引发an
。使用该as方法,结果为null,可以对其进行检查,并避免引发异常。

另外,您只能使用as引用类型,因此,如果将类型转换为值类型,则仍必须使用“经典”方法。

注意:

as方法只能用于可以分配null值的类型。这种用法仅表示引用类型,但是当.NET
2.0出现时,它引入了可为空的值类型的概念。由于可以为这些类型分配一个null值,因此可以与as运算符一起使用。

2020-05-19