检查类型时,是将"is"与"as"一起使用更好,还是只使用"as"和 null 检查更好?



可能重复:
铸造与使用';作为';CLR中的关键字
先铸造后检查还是先检查后铸造?

假设以下代码设置:

public class BaseFoo { ... }
public class DerivedFoo : BaseFoo { ... }

现在,我有一个名为fooBaseFoo对象,它实际上可能是DerivedFoo类型,也可能不是。如果它是一个DerivedFoo对象,我需要添加几个步骤来处理它

选项1:

if (foo is DerivedFoo)
{
    var dfoo = foo as DerivedFoo;
    // Continue processing...
}

选项2:

var dfoo = foo as DerivedFoo;
if (dfoo != null)
{
    // Continue processing...
}

就我个人而言,我认为选项1更具可读性和简洁性,但我想知道我是否遗漏了任何性能打击或行为差异。

要检查对象是否属于某个类,只需使用运算符"is"即可。

if (object is ClassName)
{ }

如果是,将返回纯true,如果为null或trully false则返回false。

最新更新