C#中is与as的区别分析

2019-12-26 12:22:46刘景俊

}

 

使用as操作符有如下几点限制

第一个就是,不用在类型之间进行类型转化,即如下编写就会出现编译错误。

 

复制代码 NewType newValue = new NewType();
NewType1 newValue = newValue as NewType1;

 

第二个就是,不能应用在值类型数据,即不能如下写(也会出现编译错误)。

 

复制代码 object objTest = 11;
int nValue = objTest as int;

 

四、as与is的区别

1、AS在转换的同事兼判断兼容性,如果无法进行转换,则 as 返回 null(没有产生新的对象)而不是引发异常。有了AS我想以后就不要再用try-catch来做类型转换的判断了。因此as转换成功要判断是否为null。

2、AS是引用类型类型的转换或者装箱转换,不能用与值类型的转换。如果是值类型只能结合is来强制转换
3、IS只是做类型兼容判断,并不执行真正的类型转换。返回true或false,不会返回null,对象为null也会返回false。

4、AS模式的效率要比IS模式的高,因为借助IS进行类型转换的化,需要执行两次类型兼容检查。而AS只需要做一次类型兼容,一次null检查,null检查要比类型兼容检查快。

五、在进行类型转换的时候,可以按照如下的方式进行选择

1、Object => 已知引用类型
使用as操作符来完成

2、Object => 已知值类型
先使用is操作符来进行判断,再用类型强转方式进行转换

3、已知引用类型之间转换
首先需要相应类型提供转换函数,再用类型强转方式进行转换

4、已知值类型之间转换
最好使用系统提供的Convert类所涉及的静态方法

六、(int)和Int32.Parse(),Convert.ToInt32()三者的区别

1、(int)转换:用在数值范围大的类型转换成数值范围小的类型时使用,但是如果被转换的数值大于或者小于数值范围,则得到一个错误的结果,利用这种转换方式不能将string转换成int,会报错。