c#如何处理好异常?  一旦程序出现异常,我用try catch 会不会因此程序不会崩溃,我只需要记录错误的地方!
                               

解决方案 »

  1.   

    用try catch 不一定能捕获所有异常,有时一些系统级异常.net无法捕获程序也会崩溃,我就遇到很多次。
      

  2.   

    通过自定义异常类,在应用程序所有的入口处添加异常处理或通过log4net等实现日志记录,
    查看系统操作。
    web里可通过转到出错页实现错误记录
      

  3.   

    try catch之后确实不会导致程序崩溃,但出了异常之后,要做的不仅仅是记录错误位置,需要根据异常类型选择合适的处理方法。
    比如一个即时消息软件,首先需要连接服务器,
    try {
        //连接服务器
    }
    catch(SocketException) {
        //提示用户检查网络连接
        return;
    }
    //下载好友列表
    异常并不是程序错误,应该像对待for循环那样,把异常当作普通的处理流程,灵活使用。
      

  4.   

    异常也分很多种的...在直接跟系统ui界面打交道的地方,需要捕获异常。例如系统仅仅对异常显示一个警告,然后就粗暴地关闭进程,这时候你就需要自己写异常处理,并且让进程继续处理下去。   
        
      在更深的层,不要捕获异常,或者仅仅对异常进行一个包装以便让异常类型更明确,例如   catch(ex   Exception){throw   new   myExceptionABCParseError("ABC系统无法解析的命令。",ex);},将异常继续抛到上一层调用者去处理。   
        
      对于一些WindowsService程序,需要无人值守地执行,在ui层不是让客户去操作,而是将错误写入系统日志。   
        
      总之,大多数时候继续抛出异常,除非上级无法接住它。
      

  5.   

    OutOfMemoryException
     当利用new关键字去初始化分配一块内存失败时
     
    StackOverflowException
     当执行程序有利用到堆栈资源时(通常是执行Recursion或太多的循环),将堆栈资源耗尽时
     
    NullReferenceException
     当要利用Reference对象时,却是NullReference
     
    TypeInitializationException
     若静态对象发生错误,但又缺乏catch区段去处理与对应时
     
    ArrayTypeMismatchException
     当存入数据与数组中数据类型不同时
     
    IndexOutOfRangeException
     当超过数组的限定范围时
     
    MulticastNotSupportedException
     当要合并两个委派对象失败时
     
    ArithmeticException
     一般在运算失败时,这包含了DivideByzeroException与OverflowException两种异常
     
    DivideByzeroException
     当使用除法运算时,分母为0所造成的错误时
     
    OverflowException
     当运算后超过数据类型的合法范围时
     
      

  6.   


    认同通过自定义异常类记录log。
      

  7.   

    我现在也在用try catch 捕获错误!然后记录在txt文件中!包括类名,方法名,错误描述!所以我很容易发现程序错误