在开发博客,在线代码示例,以及(最近)甚至是一本书中,我一直对类似的代码code之以鼻:
var y = x as T;
y.SomeMethod();
或更糟糕的是:
(x as T).SomeMethod();
这对我来说没有意义。如果您确定x
类型为T
,则应使用直接强制转换:(T)x
。如果不确定,可以使用as
但需要检查null
后再执行某些操作。上面的代码所做的就是将(有用的)InvalidCastException
变成(无用的)NullReferenceException
。
我是唯一认为这是公然滥用as
关键字的人吗?还是我错过了明显的事情,而上述模式确实有意义?
((T)x).SomeMethod()
,不是吗?;)(开个玩笑,您当然是对的!)
(f as T).SomeMethod()
;)