什么是is-operator的好用法

时间:2012-11-29 09:30:21

标签: c#

is-operator的良好用法是什么?

以下用于强制转换的构造不是推荐的方法,几乎​​所有文档都优先使用as-operator进行空值检查。

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

确定这是(非常小的)性能提升,有些甚至提到了胎面安全性。 是的,这是真的......

那么,为什么我们有is-operator?
“带有空检查的操作员”在哪里不起作用或不是可行的方法? 通过使用is-operator来限制您声明的范围是否有优势?

1 个答案:

答案 0 :(得分:11)

as无法使用不可为空的struct

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()不适用于此,因为您不希望手动考虑子类,接口等。