C#2.0 is运算符

“is”运算符所做的操作,不仅仅检查数据能否从一个类型转换成另一个类型。一个类型内部可能实现类向某一类型的强制转换,然而“is”运算符不仅仅检查类型成功,还会检查底层对象本身是否真的是一个要转换的类型或者兼容类型。

下面通过一个小例子来说明下问题。

 

object o = new object ();

Console. WriteLine (o is string );

o = "o contains string value ";

Console. WriteLine ( o is string );

o = 123;

Console. WriteLine ( o is string );

 

输出的结果是:

false

true

false

为什么是这样的结果呢?

 

先说第一个输出,“o”初始化为一对象。Object实现了向string转换的方法ToString(),应该说是可以向string转换成功的。但是我们说“is”不仅仅检查是否能转换成功,还检查对象本省是否是目标类型或兼容类型。由于所有类型都是从object类派生出来的,所以所有类型是“属于”object类型的,而object不一定属于派生类型,需要强制转换。所以返回的结果是“false”。

第二个输出由于给“o”赋值是一个字符串,所以“o”存储的是string类型的值。所以返回“true”。

同样第三个输出也是由于“123”是数值类型的,不是string类型的,所以返回“false”。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xiage/archive/2009/06/27/4302639.aspx

你可能感兴趣的:(C#2.0 is运算符)