【问题标题】:When checking for a type, is it better to use "is" with "as" or just "as" and a null check? [duplicate]检查类型时,最好使用“is”和“as”还是只使用“as”和空检查? [复制]
【发布时间】: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 { ... }

现在,我有一个名为fooBaseFoo 对象,它实际上可能是也可能不是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 运算符,而不是直接转换?

标签: c# operators


【解决方案1】:

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

if (object is ClassName)
{ }

如果是则返回平真,如果为空或真假则返回假。

【讨论】:

  • 这根本没有解决选项 2
  • ....哦,真的吗?他问在性能方面什么是最可行的,我的回答就是一切。
  • 下次备份你所说的@niklas-b .... if (object is ClassName) 可以同时应用于 Basefoo 和 DerivedFoo
  • 我没有投反对票,因为我认为这是一个有效的答案,但由于您的严厉回应,我现在很想这样做。
猜你喜欢
  • 2012-08-25
  • 2023-01-14
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 2014-11-05
  • 1970-01-01
相关资源
最近更新 更多