【发布时间】:2012-04-03 17:39:52
【问题描述】:
可能重复:
Casting vs using the 'as' keyword in the CLR
Cast then check or check then cast?
假设以下代码设置:
public class BaseFoo { ... }
public class DerivedFoo : BaseFoo { ... }
现在,我有一个名为foo 的BaseFoo 对象,它实际上可能是也可能不是DerivedFoo 类型。如果它是DerivedFoo 对象,我需要添加几个步骤来处理它。是否有任何非主观原因更喜欢以下代码 sn-ps 之一:
选项 1:
if (foo is DerivedFoo)
{
var dfoo = foo as DerivedFoo;
// Continue processing...
}
选项 2:
var dfoo = foo as DerivedFoo;
if (dfoo != null)
{
// Continue processing...
}
就我个人而言,我认为选项 1 更具可读性和简洁性,但我想知道我是否遗漏了任何性能损失或行为差异。
【问题讨论】:
-
这是一个受骗的骗子,请选择选项 2,否则您将做两倍的工作
-
骗子在哪里?我没找到。
-
这闻起来很香……具体来说,它违反了替换原则。
-
@Niklas B. - 我愿意接受其他建议。
-
在选项 1 中,您为什么使用
as运算符,而不是直接转换?