【发布时间】:2011-01-09 12:49:38
【问题描述】:
在开发博客、在线代码示例和(最近)甚至是一本书中,我总是对这样的代码磕磕绊绊:
var y = x as T;
y.SomeMethod();
或者,更糟糕的是:
(x as T).SomeMethod();
这对我来说没有意义。如果您确定x 的类型为T,则应使用直接转换:(T)x。如果不确定,可以使用as,但需要在执行某些操作之前检查null。以上代码所做的就是将(有用的)InvalidCastException 变成(无用的)NullReferenceException。
只有我认为这是对as 关键字的公然滥用吗?还是我错过了一些明显的东西,而上面的模式实际上是有道理的?
【问题讨论】:
-
看到会更有趣(像 S 一样亲吻)。SteveIsSuchA();但我同意,这是一种滥用。
-
这比写
((T)x).SomeMethod()酷多了,不是吗? ;)(开个玩笑,你当然是对的!) -
@P Daddy 我不同意,非常好的问题(这个代码模式真的有意义吗),并且非常有用。对问题 +1,对投票结束的人皱眉。
-
Lucerno 是对的,这种编码模式是通过避免使用括号而引起的。接触 Lisp 后无法治愈。
-
优化代码:
(f as T).SomeMethod();)
标签: c# casting type-conversion