不用想了,哪有十全十美的事
用try Catch  确实很占用资源,因为它要跟踪代码,所以都在判断确实会抛出异常时才用。

解决方案 »

  1.   

    不用try  catch  那用什么能解决?
      

  2.   

    no,各位可能都理解偏了。 比如一个方法:
            public bool CreateDirectory(string dirName, out string msg) {
                try {
                    Directory.CreateDirectory(dirName);
                } catch (IOException ioe) {
                    msg = "目录是只读的或不为空等";
                    return false;
                } catch (UnauthorizedAccessException uace) {
                    msg = "没有创建权限";
                    return false;
                } catch (ArgumentException ae) {
                    msg = "无效的路径";
                    return false;
                } catch (NotSupportedException nse) {
                    msg = "试图创建只使用冒号字符 (:) 的目录";
                    return false;
                } catch (Exception e) {
                    msg = "其他目录创建异常";
                    return false;
                }
                msg = "目录创建成功";
                return true;
            }有这么多种exception要抓取,我总不能全背诵下来,某些书上说单用一个总的Exception,也就是程序中最后的那个exception,也不是很有效率;而如netbeans这样的java开发工具,就可以在选中Directory.CreateDirectory(dirName);后自动抓取其全部exception。各位理解了吗?
      

  3.   

    C#中所有的异常类都是从Exception继承来的,所以你只用Exception就可以捕获到所有的异常了,这个没有任何问题.我不理解什么是"也不是很有效率"?
    这是什么意思呢?
      

  4.   

    比如,你完全可以使用如下的方法而不是因此降低执行效率:
            public bool CreateDirectory(string dirName, out string msg) {
                try 
                {
                    Directory.CreateDirectory(dirName);
                }
                catch (Exception e)
                {
                    msg = e.Message;
                    return false;
                }
                msg = "目录创建成功";
                return true;
            }
      

  5.   

    我前几日书店翻了一本书,好像叫什么 .net efficiency,我翻到的那页就是:不要轻易catch这个大的exception。
      

  6.   

    VS.net 2005下面应该没有这样的工具,等下个版本吧
    如果一个类抛出N个异常的话,可以在程序某处自己封装一下,捕获到这些异常后,抛出你自己定义的一个异常,以后就用这个异常来处理。至于“C#中所有的异常类都是从Exception继承来的,所以你只用Exception就可以捕获到所有的异常了,这个没有任何问题.”这个说法是值得商榷的,因为在程序运行的任何时候都可能抛出StackOverException或者OutOfMemoryException,这样你的程序可能会正好捕捉到这两个异常,而运行本不应该进行的异常方式。
      

  7.   

    伟大的VS,伟大的VS,它继承了微软的一切优良传统,这个时候它不是一个人在战斗,不是一个人在战斗,比尔盖茨这一刻灵魂附体
      

  8.   

    概念不清,看书的时候一定要理解作者的意图,这样一知半解还不如不看书……1、catch没有任何效率可言,抛出异常是一个开销比较大的动作,而相较而言catch的开销可以忽略不计,所以是尽量不要抛出异常,而不是尽量不要catch异常。2、并不是所有的异常都要捕获的,处理异常的标准是,我知道它可能会出错且我明确的知道这个错误应该这样处理,而不是我要把所有的异常全都捕获下来,这样的结果只会是出了错都不知道,异常本来就是一种保护措施。3、不要catch Exception并不是因为什么鬼效率,正如上面所说,必须是明确知道这个错误应该怎样处理,我明确知道的错误,且有能力处理的时候才能处理,显然大部分代码是不能处理所有异常的。只有诸如异常记录、异常显示等代码才应该捕获所有异常。
      

  9.   

    异常屏蔽在有些时候也是有用的,例如线程发现出现了异常,把自己关闭重启。Windows服务发现出现了异常,记录异常后重启。WebService发现出现了异常,告知客户端后关闭自己。
      

  10.   

    http://www.microsoft.com/downloads/details.aspx?familyid=7855A3ED-071A-4584-877C-A6F0CE690F34&displaylang=en
    http://www.gotdotnet.com/Team/FxCop/
      

  11.   

    http://blogs.msdn.com/fxcop/archive/2006/06/14/631923.aspx
      

  12.   

    FxCop 1.36 Beta 2 a code analysis tool for .NET managed assemblies 确实是个好东西