Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# is运算符的良好用法是什么_C# - Fatal编程技术网

C# is运算符的良好用法是什么

C# is运算符的良好用法是什么,c#,C#,is运算符的良好用法是什么 下面用于强制转换的构造不是推荐的方法,实际上所有文档都倾向于使用带有null检查的as运算符 if(obj is SomeClass) { SomeClass some = (SomeClass)obj; .... } 当然,这是一个(非常小的)性能提高,有些人甚至提到胎面安全。 是的,这是真的 那么,为什么我们有is操作符呢? “带空检查的as运算符”在哪里不起作用或不可行? is是否有优势来限制使用is运算符得到的声明的范围 as不适用于不可为空的结构s

is运算符的良好用法是什么

下面用于强制转换的构造不是推荐的方法,实际上所有文档都倾向于使用带有null检查的as运算符

if(obj is SomeClass)
{
  SomeClass some = (SomeClass)obj;
  ....
}
当然,这是一个(非常小的)性能提高,有些人甚至提到胎面安全。 是的,这是真的

那么,为什么我们有is操作符呢?
“带空检查的as运算符”在哪里不起作用或不可行?

is是否有优势来限制使用is运算符得到的声明的范围

as
不适用于不可为空的
结构
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()/<代码>是不合适的,因为你不想手动考虑子类、接口等。

我认为一种情况是,当你想要测试某个东西的类型,但不需要把它赋值给一个变量并使用它时,@ ZEV:听起来好像埃里克掉了太多的东西:“法律上是,事实上是,事实上是:”)这个链接在这方面值得一读@Tim good spot,但尽管这是事实,但它并不影响
is
as
之间的差异。这会影响
as
与cast之间的差异。