和有什么区别
string url = (string)data AND string url = data as string;
哪个是更好的方法?
InvalidCastException
如果转换失败,第一个构造将抛出一个,而如果变量不是字符串,则as
运算符将返回 null 。data
哪个是更好的方法?
这将取决于您要达到的目标。
可以将as
其视为将对象转换为特定类型的尝试。如果失败,结果变量将保持null
. 另一方面,直接强制转换是强制转换1 way ticket
,如果失败将抛出异常。
本质上,当对象可以转换为特定类型时,它们会做完全相同的事情,但是如果您的转换无效,一个会抛出异常,另一个会“优雅地失败”。
你使用哪一个真的取决于场景。如果您的变量是代码的一个组成部分(即,如果转换失败则继续执行代码没有意义),只需使用直接转换并处理异常。但是,在某些情况下,不引发异常并处理空值也非常有用。
as 关键字是防御性强制转换,当有一个强制转换时不会抛出异常