C#中强制转换:(NewType) 和 Object as NewType的区别

在C#中下面这两个类型转换有什么区别?

SomeClass sc = (SomeClass)SomeObject;
SomeClass sc2 = SomeObject as SomeClass;

通常,它们都应该被显式转换为指定的类型吗?

解决方案

最明显的区别:
如果源类型不能转换为目标类型,则前者将引发异常。
后者将导致sc2为空引用,但没有异常。
(如果强制转换尝试失败,则括号强制转换将引发异常。如果转换尝试失败,则" as"转换将返回null。)

其他区别:

  • 我们不能使用'as'运算符强制转换为不接受'null'作为值的类型
  • 我们不能使用'as'来转换事物,例如将数字转换为不同的表示形式(例如,将float转换为int)。

最后,使用" as"与强制转换运算符,有"我不确定是否会成功"的意思。

日期:2020-03-24 11:01:24 来源:oir作者:oir