15

is-operator有什么好的用法?

下面的强制转换构造不是推荐的方法,几乎​​所有文档都更喜欢带有空检查的 as-operator。

if(obj is SomeClass)
{
  SomeClass some = (SomeClass)obj;
  ....
}

当然,这是一个(非常小的)性能提升,有些人甚至提到了胎面安全性。是的,这是真的……

那么,为什么我们有 is-operator 呢?
“带有空检查的操作员”在哪里不起作用或不是要走的路?
is 是否具有限制使用 is-operator 获得的声明范围的优势?

4

1 回答 1

11

as不适用于不可为空struct的 s:

object o = 123;
int i = o as int; // compile error

然而:

object o = 123;
if(o is int) {
    int i = (int)o;
    //...
}

当然,从 2.0 开始你也可以使用:

int? i = o as int?;

null像往常一样测试。

还有一种情况是你不关心对象的值......你只需要知道它是什么

if(obj is Something)
    throw new InvalidOperationException("Seriously, don't do that");
// phew! dodged a bullet; we're ok here...

请注意,这GetType()不适合此操作,因为您不想手动考虑子类、接口等。

于 2012-11-29T09:32:56.317 回答