看了许多C#的书,都说用as运行符进行类型转换有多好,但我觉得catch也挺好的啊。以下两种方式到底谁好,好在哪呢?// as的方式
Cow myCow = myAnimal as Cow;
if (myCow != null)
{
   myCow.Milk();
}
else
{
   Console.WriteLine("类型转换错误");
}// try-catch的方式
try
{
   Cow myCow = myAnimal as Cow;
   myCow.Milk();
}
catch (Exception e)
{
   Console.WriteLine("类型转换错误");
}

解决方案 »

  1.   

    你的代码中 try catch 不但抛出了类型转换的异常 还抛出了myCow.Milk();的异常了第一种方法感觉很实用 ,try catch一般都是去捕获未知的异常,第一种方法恰恰可以让咱们把错误已知话 不是更好?
      

  2.   

    嗯楼上说的这个我想起件以前的一个事 以前不清楚try catch的缺点 为了图省事就在程序中用了大量try catch  结果后来,,,发现程序运行的那个慢呀 把之前try catch改成别的方式判断后 程序运行速度提升了5倍以上 一点都没夸张
      

  3.   

    as 转换代码结构简单,catch这种效率低,不推荐。也可以:
    if(myAnimal is Cow)
    {
    Cow myCow = myAnimal as Cow;
    myCow.Milk();
    }这样更简单。
      

  4.   

    已经用了 as了,还try catch个毛线?try catch的话肯定是(type)object 这种强制转化格式的啊。
      

  5.   

    如 foreach(Control c in Controls)
    {
      
          TextBox tb= c as TextBox;
          // 如果c不属于TextBox那么c as TextBox 返回的事nuLL
         //当使用强类型转换时(textbox)c 程序就会报错
      
    }
      

  6.   

    这种不如判断null了。is里就要检查类型,as里又检查一遍,当然这点效率不算什么,不过这种写法是很蛋疼啊
      

  7.   

    尽量少用try catch,效率低不说,后期维护也很困难,因为有时候用try catch抛出异常后,根本不知道是哪里错了
      

  8.   

    首先,ls的说法是错误的。try catch根本不会“抛出异常”。as 操作没有办法转换值类型。
    因为 as 在转换失败的时候返回 null,值类型不能是 null。关于 as 和强制类型转换更多的比较,推荐你看C#高效编程这本书。我想说的在这本书中都有。
      

  9.   

    as转换是类型安全的转换。而“(Type)o“这种转换有可能在运行时产生错误。而如果避免这种错误,我们就得先判断转换源是否是目标类型(if(o is Type) ....)。这句is仅做判断,而如果成立又要做一次转换,这是无意义的冗余。
    而用as,只需判断一下转换结果是否为null,不为null是可以拿过来直接用的。
    当然as转换不能用于值类型。
      

  10.   

    各种类型转换的pattern里,try...catch是最不好的吧,写那么大一堆,效率还低。as主要是用来代替这种代码:
    if(obj is Class1) (Class1)obj.DoSomething();
    它先判断obj是否是Class1,然后转换,看起来挺合理。但是,is这个运算符本来就会做一次转换,后来再转一次,就执行了两次转换;而as只执行一次。有些时候只能用强制转换
    因为as只考虑引用转换以及装箱,不能拆箱,不考虑用户自定义转换。强制转换是全能型的,什么都可以。
      

  11.   

    caozhy  
    看了你回复的帖子 到处装逼 唉 人可以贱 但不能像你这样贱
      

  12.   

    try...catch是异常捕获,从Windows的捕获机制上来说处理一个类型采取这种方式是效率低下,得不偿失的
    而as作为C#关键字,能处理类型的兼容而不会出现异常,这种好处是多方面的
      

  13.   

    交流方式不对,BS下16楼,有点阿Q。
      

  14.   

    正解。我简单说一下别的:
    1.性能方面来说,.net类型转换,as字符只会判断一次,而is会判断很多次(父祖级都会去一一判断),as效率高。异常的效率就不说了,更低...
    2.错误捕获机制来说。try catch不是这样用的,一般try catch,是捕获预期的异常。
    一般拿到所有的异常,只是最终发布程序以防万一,把异常信息输出log。书的话,C#高效编程?不会是高级编程吧?很扯蛋的,理论的东西··!推荐clr via c#,这本书不错,我个人颇觉收益
      

  15.   

    这本书一共分了50个专题,专门讲解C#一些细节语法的使用和最佳实践,其中有一篇专门介绍is和as的,写得非常好。