“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”。
本文详细解析了C#中的is运算符的工作原理。is运算符不仅检查数据类型之间的转换可能性,还深入检查对象本身的类型,确保其与目标类型完全匹配。通过几个示例演示了不同类型赋值情况下is运算符的判断逻辑。


被折叠的 条评论
为什么被折叠?



