黑马程序员技术交流社区

标题: C# as和is的区别 [打印本页]

作者: cmcm2014    时间: 2014-3-27 22:45
标题: C# as和is的区别
本帖最后由 cmcm2014 于 2014-3-28 16:17 编辑

突然想到这2个 我自己写代码时 对于类型转换时 用到过as  但是is却没用过,想知道两者间是否有联系,是否有区别!
作者: siyuefeiyang    时间: 2014-3-27 22:58
is转换规则:
1. 检查对象类型的兼容性,并返回结果true(false);
2. 不会抛出异常;
3. 如果对象为null,刚返回false;
比如:
object obj = "1234";  
if (obj is string) //执行第一次类型兼容性检查  
{  string s = (string)obj; //执行第二次类型兼容性检查,并转换  
    MessageBox.Show("转换成功!");  
}else  {  
    MessageBox.Show("转换失败!");  
}

as转换规则:
1.检查对象类型的兼容性,并返回转换结果,如果不兼容则返回null;
2.不会抛出异常;
3.如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常;
object obj = "123";  
string str = obj as string; //执行第一次类型兼容性检查,并返回结果  
if (str != null)   
    MessageBox.Show("转换成功!");  
else  
    MessageBox.Show("转换失败!");  


注:as比is少执行一次兼容性检查,性能可能会高一点点。

作者: cmcm2014    时间: 2014-3-27 23:15
siyuefeiyang 发表于 2014-3-27 22:58
is转换规则:
1. 检查对象类型的兼容性,并返回结果true(false);
2. 不会抛出异常;

非常详细,完全理解,谢谢·
作者: 心灵苦旅    时间: 2014-3-28 09:12
又长知识了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2