在开发博客、在线代码示例和(最近)甚至是一本书中,我经常遇到这样的代码:
var y = x as T;
y.SomeMethod();
或者,更糟糕的是:
(x as T).SomeMethod();
这对我来说没有意义。如果你确定x是类型T,你应该使用直接强制转换:(T)x。如果不确定,可以使用as,但在执行某些操作之前需要检查是否为空。上面的代码所做的就是将一个(有用的)InvalidCastException转换为一个(没用的)NullReferenceException。
难道只有我一个人认为这是对as关键字的公然滥用吗?还是我错过了一些明显的东西,而上面的模式实际上是有意义的?