类型转换 (ClassName) 与  as ClassName 有什么不同,那个效率更高
     如:
              Hashtable tempHashTableA = (Hashtable)Application["valueList"];
              Hashtable tempHashTableB = Application["valueList"] as Hashtable;

解决方案 »

  1.   

    Hashtable tempHashTableA = (Hashtable)Application["valueList"];
    这个会报错
    Hashtable tempHashTableB = Application["valueList"] as Hashtable;
    不会报错
    第二个要优于第一个,更安全,更有效率
      

  2.   

    http://msdn.microsoft.com/zh-cn/library/cc488006.aspx
    as要好些
      

  3.   

    一个调用()一个调用as,没有什么区别,在调用之前最好用is先判断一下
      

  4.   

    注: 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 的判断 ,价值大吗?
      

  5.   

    Microsoft Visual C++.NET技术内幕(第6版)中明确说到"尽量使用as而不是强制转换"
      

  6.   

    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 效率高
      

  7.   


    强制转换运算符
    类型转换失败会抛出异常InvalidCastException
    只要类型转换成立,null值不会抛出异常as类型转换运算符
    永远不会抛出异常
    输入null值或者转换失败都会返回null
    当需要转换对象的类型属于转换目标类型或者转换目标类型的派生类型的时候,
    那么此转换操作才能成功,而且并不产生新的对象。
    因此用as来进行类型转换使安全的
    还有typeof()等
      

  8.   

    Hashtable tempHashTableB = Application["valueList"] as Hashtable;
    等价于
    Hashtable tempHashTableB = Application["valueList"] is Hashtable? (Hashtable)Application["valueList"] : null;