zoukankan      html  css  js  c++  java
  • ASP.NET(C#)中的try catch异常处理机制

    在开发一个Umbraco平台系统的过程中,遇到了问题。 写的代码如下

    fileUrl = MediaHelper.GetMediaUrl(Convert.ToInt32(publishedContent.GetProperty("mediaPdf").DataValue.ToString()));

    这个是在Umbraco后台建立了一个pdfInfo的DocumentType, 它里面有个属性是mediaPicker, 从media文件夹中选取pdf文件。这个属性名称是mediaPdf, 这里就是获取mediaPdf的属性值(节点ID), 转化为Int32类型,然后来获取这个pdf在media folder文件夹

    下的url. 

    现在有个问题是,content Editor在Umbraco后台,增加一个pdfInfo类型的DocumentType时,忘记添加mediaPdf属性了,也就是说没有从Media文件夹中选择文件,那么这个属性值就是空值,转化为Int32类型Convert.ToInt32就会报错

    如何解决呢 ? 写如下语句

      var fileUrl = "";
                    try
                    {
                        fileUrl = MediaHelper.GetMediaUrl(Convert.ToInt32(publishedContent.GetProperty("mediaPdf").DataValue.ToString()));
                    }
                    catch (Exception e)
                    {
    
                    }

    这里就是使用了Try Catch语句块

    catch语句中使用如下方式:

    catch( Exception  e )

    { }

    将在任何情况下,编译都能通过

    以下是对Try Catch语句块的理解

    通常我们在编程时,将可能引发异常的代码节放在 Try 块中,而将处理异常的代码放在 Catch 块中。Catch 块是一系列以关键字 catch 开头的语句,语句后跟异常类型和要执行的操作。

    下面详细讲解一下 try catch 的用法:

    转载自 http://blog.csdn.net/studyofnet/article/details/13083999 

    异常的概述:

     

    1、在应用程序遇到异常情况(如被零除情况或内存不足警告)时,就会产生异常。

    2、在可能引发异常的语句周围使用 try 块。

    3、try 块中发生异常后,控制流会立即跳转到关联的异常处理程序(如果存在)。

    4、如果给定异常没有异常处理程序,则程序将停止执行,并显示一条错误消息。

    5、如果 catch 块定义了一个异常变量,则可以使用它来获取有关所发生异常的类型的更多信息。

    6、可能导致异常的操作通过 try 关键字来执行。

    7、异常处理程序是在异常发生时执行的代码块。在 C# 中,catch 关键字用于定义异常处理程序。

    8、程序可以使用 throw 关键字显式地引发异常。

    9、异常对象包含有关错误的详细信息,比如调用堆栈的状态以及有关错误的文本说明。

    10、即使引发了异常,finally 块中的代码也会执行,从而使程序可以释放资源。

    异常通用用法:

    try  
    {  
     //程序代码块;  
     //尽力执行该代码块,并捕捉可能发生的异常  
    }  
    catch(Exception e)   
    {  
    //异常处理代码块;若异常不被处理,程序将会中止。  
       
    //一个try,可对应多个catch,异常处理机制会搜寻参数与异常类型相符的,进入那个catch从句。必须正确排列捕获异常的catch子句,范围小的Exception放在前面的catch。即如果Exception之间存在继承关系,就应把子类的Exception放在前面的catch子句中。  
       
    //若当前处理不了该异常,那么把它再抛出。也可在此再抛出异常,实现对错误的封装;  
       
    //没有表达式的throw(throw;),将会再次抛出被catch捕捉到的异常。  
       
    //使用不带参数的catch子句,则可以捕获任意类型的异常  
    }  
    finally  
    {  
    //存在于异常处理的标准事件流之外。  
       
    //用来清理资源或还原相关设置信息等其他操作  
       
    //是否发生异常,均要执行的代码块;  
    }  

    异常处理使用建议:

     

    1、不要返回错误代码。异常是报告框架中的错误的主要手段。

    2、尽可能不对正常控制流使用异常。除了系统故障及可能导致争用状态的操作之外,框架设计人员还应设计一些 API 以便用户可以编写不引发异常的代码。例如,可以提供一种在调用成员之前检查前提条件的方法,以便用户可以编写不引发异常的代码。

    3、不要包含可以根据某一选项引发或不引发异常的公共成员。

    4、不要包含将异常作为返回值或输出参数返回的公共成员。

    5、考虑使用异常生成器方法。从不同的位置引发同一异常会经常发生。为了避免代码膨胀,请使用帮助器方法创建异常并初始化其属性。

    6、避免从 finally 块中显式引发异常。可以接受因调用引发异常的方法而隐式引发的异常。

  • 相关阅读:
    [CSP-S模拟测试]:迷宫(最短路)
    [CSP-S模拟测试]:五子棋(模拟)
    [CSP-S模拟测试]:点亮(状压DP+树上背包DP)
    [CSP-S模拟测试]:统计(树状数组+乱搞)
    [CSP-S模拟测试]:组合(欧拉路)
    [CSP-S模拟测试]:笨小猴(随机化)
    最小表示法
    BZOJ4868 [Shoi2017]期末考试 【三分 + 贪心】
    BZOJ4870 [Shoi2017]组合数问题 【组合数 + 矩乘】
    BZOJ4919 [Lydsy1706月赛]大根堆 【dp + 启发式合并】
  • 原文地址:https://www.cnblogs.com/wphl-27/p/6041343.html
Copyright © 2011-2022 走看看