类型转换 (ClassName) 与 as ClassName 有什么不同,那个效率更高
如:
Hashtable tempHashTableA = (Hashtable)Application["valueList"];
Hashtable tempHashTableB = Application["valueList"] as Hashtable;
如:
Hashtable tempHashTableA = (Hashtable)Application["valueList"];
Hashtable tempHashTableB = Application["valueList"] as Hashtable;
解决方案 »
- WebDateChooser 赋值问题
- 怎么解决自定义用户控件的互相关联问题
- 用DataView的sort方法或者其他筛选之后 不能直接映射回Table??
- 如何得到一个类或实体的私有字段信息?如通过反射GetFields方法只能得到公有字段,私有字段怎么得到呢?
- 如何可以让图片360度旋转?
- 如何获取当前程序的路径?
- 求:怎样和把医学中使用的B超的图像取下来?
- 求助:C#里向临时建立的datatable里填充数据为什么占内存那么大?有方法解决吗?
- datagrid中如何一边编辑一边更新(直接更新到数据库中去),写在那个事件中
- .Net 有没有可用的对象持久化框架
- 矩阵填数?
- as3 sprite
这个会报错
Hashtable tempHashTableB = Application["valueList"] as Hashtable;
不会报错
第二个要优于第一个,更安全,更有效率
as要好些
所以 我在 .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 的判断 ,价值大吗?
object o = GetFromCache("A_KEY");
EmployeeInfo employee = o as EmployeeInfo;
if(employee != null) {
// TODO: 代码
} 这个写法的意思是 不判断类型 直接强制转换 ,然后判断是否为null 如果 只是想知道是否是某种类型的话 ,使用is 要比 as 效率高
强制转换运算符
类型转换失败会抛出异常InvalidCastException
只要类型转换成立,null值不会抛出异常as类型转换运算符
永远不会抛出异常
输入null值或者转换失败都会返回null
当需要转换对象的类型属于转换目标类型或者转换目标类型的派生类型的时候,
那么此转换操作才能成功,而且并不产生新的对象。
因此用as来进行类型转换使安全的
还有typeof()等
等价于
Hashtable tempHashTableB = Application["valueList"] is Hashtable? (Hashtable)Application["valueList"] : null;