类型转换 (ClassName) 与 as ClassName 有什么不同,那个效率更高

yidichaxiang 2009-09-16 10:21:03
类型转换 (ClassName) 与 as ClassName 有什么不同,那个效率更高
如:
Hashtable tempHashTableA = (Hashtable)Application["valueList"];
Hashtable tempHashTableB = Application["valueList"] as Hashtable;
...全文
157 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
danjiewu 2009-09-16
  • 打赏
  • 举报
回复
Hashtable tempHashTableB = Application["valueList"] as Hashtable;
等价于
Hashtable tempHashTableB = Application["valueList"] is Hashtable? (Hashtable)Application["valueList"] : null;
wuyq11 2009-09-16
  • 打赏
  • 举报
回复

强制转换运算符
类型转换失败会抛出异常InvalidCastException
只要类型转换成立,null值不会抛出异常

as类型转换运算符
永远不会抛出异常
输入null值或者转换失败都会返回null
当需要转换对象的类型属于转换目标类型或者转换目标类型的派生类型的时候,
那么此转换操作才能成功,而且并不产生新的对象。
因此用as来进行类型转换使安全的
还有typeof()等
阿非 2009-09-16
  • 打赏
  • 举报
回复
is 与 as 两个关键字都是 .net 2.0 里新增的

推荐使用 as 代替 强制类型转换,因为强转 如果类型不一致 会报错,

而 as 关键字则不会,会返回null,所以 as 关键字只能应用于 引用类型对象。

is 是判断左右两边的类型是否一致 与 as 在某些场景 会有交错,但 两者各有特点,不建议替换。

----------------------------------------
object o = GetFromCache("A_KEY");
EmployeeInfo employee = o as EmployeeInfo;
if(employee != null) {
// TODO: 代码
}

这个写法的意思是 不判断类型 直接强制转换 ,然后判断是否为null

如果 只是想知道是否是某种类型的话 ,使用is 要比 as 效率高
TTOJJ 2009-09-16
  • 打赏
  • 举报
回复
Microsoft Visual C++.NET技术内幕(第6版)中明确说到"尽量使用as而不是强制转换"
fengjian_428 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yidichaxiang 的回复:]
注: Application["valueList"] 传入时,就是hashtable,
所以 我在 .net 2.0 中 还未遇到报错。

在【PK贴】大家晒下C#开发代码的小技巧啊!
http://topic.csdn.net/u/20090804/16/3f463808-00ff-479b-b07d-20751534e77c.html?56933

中看到

1. 使用as,而非is

object o = GetFromCache("A_KEY");
EmployeeInfo employee = o as EmployeeInfo;
if(employee != null) {
  // TODO: 代码
}

所以 is 的判断 ,价值大吗?


[/Quote]
如果不需要转型 只是想判断类型就用is咯
yidichaxiang 2009-09-16
  • 打赏
  • 举报
回复
注: Application["valueList"] 传入时,就是hashtable,
所以 我在 .net 2.0 中 还未遇到报错。

在【PK贴】大家晒下C#开发代码的小技巧啊!
http://topic.csdn.net/u/20090804/16/3f463808-00ff-479b-b07d-20751534e77c.html?56933

中看到

1. 使用as,而非is

object o = GetFromCache("A_KEY");
EmployeeInfo employee = o as EmployeeInfo;
if(employee != null) {
// TODO: 代码
}

所以 is 的判断 ,价值大吗?

ztenv 2009-09-16
  • 打赏
  • 举报
回复
一个调用()一个调用as,没有什么区别,在调用之前最好用is先判断一下
fengjian_428 2009-09-16
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/cc488006.aspx
as要好些
wdzr_826 2009-09-16
  • 打赏
  • 举报
回复
Hashtable tempHashTableA = (Hashtable)Application["valueList"];
这个会报错
Hashtable tempHashTableB = Application["valueList"] as Hashtable;
不会报错
第二个要优于第一个,更安全,更有效率

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧