C#中,我们可以使用is as操作符来判断某数据类型和其它指定类型的关系

is运算符验证基础类型

C#允许在继承链中向下转型,所以如果DerivedClass派生自BaseClass,那么DerivedClass is BaseClass返回true

as而不是强制转换

as运算符可以代替强制转换操作,我们推荐使用as而不是以前的强制转换,因为普通的强制转换如果失败,会抛出一个需要处理的异常;但是as转换如果失败,仅是把转换结果变为null,而不是抛出一个异常。这样避免了因为转型异常而影响程序效率。

is as区别

1. is并没有转换类型,是验证。而as能够转换类型

2. is不是验证ClassA能够转换到ClassB,而是验证ClassAClassB派生而来。即就算ClassA能够转换到ClassB,但是如果没有ClassA:ClassB这样的派生关系,is运算符不会返回true,而会返回false。下面是例子:

1 ClassA{
2 public static explicit operator ClassB (ClassA a){
3 return new ClassB(a);/* 假设ClassB实现了 public ClassB(ClassA a)构造函数*/
4 }
5 }

如上代码,ClassA实现了显式强制转换到ClassB的代码,调用ClassA as ClassB是可以成功的,但是如果调用ClassA is ClassB就会返回false,因为ClassAClassB没有派生关系。

作者: 甘木 发表于 2011-07-30 14:40 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"