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