即使没有空检查,使用“ as”代替强制转换是否有意义?

在开发博客,在线代码示例,以及(最近)甚至是一本书中,我一直对类似的代码code之以鼻:


var y = x as T;

y.SomeMethod();

或更糟糕的是:


(x as T).SomeMethod();

这对我来说没有意义。如果您确定x类型为T,则应使用直接强制转换:(T)x。如果不确定,可以使用as但需要检查null后再执行某些操作。上面的代码所做的就是将(有用的)InvalidCastException变成(没用的)NullReferenceException。


我是唯一认为这是公然滥用as关键字的人吗?还是我错过了明显的事情,而上述模式确实有意义?


动漫人物
浏览 363回答 3
3回答

哈士奇WWW

我经常看到对该误导性文章的引用是“按原样”比强制转换更快的证据。本文最明显的误导性方面之一是图形,该图形未指示正在测量的内容:我怀疑它正在测量失败的强制类型转换(其中“ as”显然要快得多,因为不会引发异常)。如果花时间进行测量,那么您将发现,如预期的那样,强制转换成功后,强制转换的速度比“ as” 更快。我怀疑这可能是“崇拜”使用as关键字而不是强制转换的原因之一。
打开App,查看更多内容
随时随地看视频慕课网APP