这篇文章主要介绍了C#中is与as的区别,较为详细的分析了is与as的道理与特性及用法区别,具有很好的学习借鉴价值,需要的伴侣可以参考下
本文实例分析了C#中is与as的区别,分享给大家供大家参考。具体分析如下:
一、C#类型的转换
在c#中类型的转换分两种:显式和隐式,根基的法则如下:
1、基类东西转化为子类东西,必需显式转换,法则:(类型名) 东西。
2、值类型和引用类型的转换给与装箱(boxing)或拆箱(unboxing).
3、子类转化为基类东西。
4、根基类型互相之间转化可以用Covent类来实现。
5、字符串类型转换为对应的根基类型用Parse要领,除了String类型外其他的类型都可以用Parse要领。
6、用GetType可以取得东西的精确类型。
7、子类转化为基类,给与隐式转换。
二、C#中的is
查抄一个东西是否兼容于其他指定的类型,并返回一个Bool值,如果一个东西是某个类型或是其父类型的话就返回为true,否则的话就会返回为false。永远不会抛出异常
如果东西引用为null,那么is操纵符总是返回为false,因为没有东西可以查抄其类型。
例如
代码如下:
object o = new object();
if (o is Label)
{
Label lb = (Label)o;
Response.Write("类型转换告成");
}
else
{
Response.Write("类型转换掉败");
}
三、C#中as的转换法则
1、查抄东西类型的兼容性,并返反转展转换功效,如果不兼容则返回null;
2、不会抛出异常;
3、如果功效判断为空,则强制执行类型转换将抛出NullReferenceException异常;
4、用as来进行类型转换的时候,所要转换的东西类型必需是方针类型或者转换方针类型的派生类型
例如
代码如下:
object o = new object();
Label lb = o as Label;
if (lb == null)
{
Response.Write("类型转换掉败");
}
else
{
Response.Write("类型转换告成");
}
使用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,会报错。
2、Int32.Parse()转换:在切合数字格局的string到int类型转换过程中使用,并可以对错误的string数字格局的抛出相应的异常。
3、Convert.ToInt32()转换:使用这种转换,所供给的字符串必需是数值的有效表达方法,该数还必需不是溢出的数。否则抛出异常。