异常处理

2015-02-26 11:50:21  访问(1397) 赞(0) 踩(0)

  • 异常处理

    一、异常有几种可能

    (1)我们未知,不可控制和发生的异常情况。比如网络断开,数据库连接不上,接口调用失败等。

    (2)我们主动判定发生和抛出的异常,终止当前的代码逻辑。

    第二种情况经常有如下几种情况

    (1)通过Id查找不到一条数据记录,抛出异常告知。

    (2)定义枚举,需求变化增加了新的枚举定义值,但没有补充相应的枚举值处理代码。

    二、异常怎么处理

    异常一般都是在代码中,try...catch进行捕获

            try

            {

                // 写逻辑代码 //

            }

            catch (Exception err)

            {

                // 这里做异常处理 //

            }

    我曾经被dvd播放机的广告误导:“超强纠错能力”,以前的代码,常常是在代码块里面进行异常处理,返回默认值。结果代码逻辑相互嵌套的情况下,一个地方发生了错误,被纠错返回一个默认值,然后继续走下面的代码,产生不少不可控的隐性错误。

    因此,对于一些关键异常,我一般都是catch后也往外抛,然后在一个继承Page的PageBase类里面做捕获。如果是开发模式,直接打印黄色的错误提示页面,如果是部署模式,则显示友好的错误页面。

    三、异常通常用几种种类

    1、传入参数为null

    2、传入的字符串参数为null或为空

    3、传入的字符串参数为null或trim后为空

    4、值为null

    5、值为null或为空

    6、值为null或trim后为空

    7、枚举未知或对应枚举值为实现

    8、该方法或逻辑已经作废

    9、该方法或逻辑尚未实现

    10、该方法或逻辑需要重载实现

    11、其它异常提示

    四、怎样异常提示才帮助开发

    (1)简单的打印提示内容。(错)

    (2)提示异常内容的同时,还需要把发生异常的位置和方法名打印出来。

    五、相关的代码和样例


  • using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Reflection;
    
    namespace SlowX.Exceptions
    {
        /// <summary>
        /// 抛出异常
        /// </summary>
        public class ExceptionsUtil
        {
    
            /// <summary>
            /// 获得枚举信息
            /// </summary>
            /// <param name="theEnum"></param>
            /// <returns></returns>
            private static string GetEnumMessage(System.Enum theEnum)
            {
                return theEnum.GetType().FullName 
                    + "." 
                    + theEnum.ToString();
            }
    
    
            /// <summary>
            /// 传入参数为null的异常提示
            /// </summary>
            /// <param name="info">发生异常的方法</param>
            /// <param name="msg">参数名称(比如:string str)</param>
            /// <returns></returns>
            public static Exception ParameterIsNullMessage
                (
                    MethodBase info, 
                    string msg
                )
            {
                string methodName = 
                    "方法:" 
                    + info.ReflectedType.FullName 
                    + " " 
                    + info.ToString();
    
                string message = 
                    "发生异常:" 
                    + "传入参数:" 
                    + msg + "为null。";
    
                return new Exception(methodName + " " + message);
            }
    
    
            /// <summary>
            /// 传入参数为null的异常提示
            /// </summary>
            /// <param name="info">发生异常的方法</param>
            /// <param name="msg">参数名称(比如:string str)</param>
            /// <returns></returns>
            public static Exception ParameterIsNullOrEmptyMessage
                (
                    MethodBase info,
                    string msg
                )
            {
                string methodName =
                    "方法:"
                    + info.ReflectedType.FullName
                    + " "
                    + info.ToString();
    
                string message =
                    "发生异常:"
                    + "传入参数:"
                    + msg + "为null或为空。";
    
                return new Exception(methodName + " " + message);
            }
    
    
            /// <summary>
            /// 传入参数为null的异常提示
            /// </summary>
            /// <param name="info">发生异常的方法</param>
            /// <param name="msg">参数名称(比如:string str)</param>
            /// <returns></returns>
            public static Exception ParameterIsNullOrBlankEmptyMessage
                (
                    MethodBase info,
                    string msg
                )
            {
                string methodName =
                    "方法:"
                    + info.ReflectedType.FullName
                    + " "
                    + info.ToString();
    
                string message =
                    "发生异常:"
                    + "传入参数:"
                    + msg + "为null或trim后为空。";
    
                return new Exception(methodName + " " + message);
            }
    
    
            /// <summary>
            /// 值为null的异常提示
            /// </summary>
            /// <param name="msg"></param>
            /// <returns></returns>
            public static Exception IsNullMessage
                (
                    MethodBase info, 
                    string msg
                )
            {
                string methodName =
                    "方法:"
                    + info.ReflectedType.FullName
                    + " "
                    + info.ToString();
    
                string message = 
                    "发生异常:" 
                    + msg + "为null。";
    
                return new Exception(methodName + " " + message);
            }
    
    
            /// <summary>
            /// 值为null的异常提示
            /// </summary>
            /// <param name="msg"></param>
            /// <returns></returns>
            public static Exception IsNullOrEmptyMessage
                (
                    MethodBase info,
                    string msg
                )
            {
                string methodName =
                    "方法:"
                    + info.ReflectedType.FullName
                    + " "
                    + info.ToString();
    
                string message =
                    "发生异常:"
                    + msg + "为null或为空。";
    
                return new Exception(methodName + " " + message);
            }
    
            /// <summary>
            /// 值为null的异常提示
            /// </summary>
            /// <param name="msg"></param>
            /// <returns></returns>
            public static Exception IsNullOrBlankEmptyMessage
                (
                    MethodBase info,
                    string msg
                )
            {
                string methodName =
                    "方法:"
                    + info.ReflectedType.FullName
                    + " "
                    + info.ToString();
    
                string message =
                    "发生异常:"
                    + msg + "为null或trim后为空。";
    
                return new Exception(methodName + " " + message);
            }
    
            /// <summary>
            /// 异常提示
            /// </summary>
            /// <param name="msg"></param>
            /// <returns></returns>
            public static Exception Message
                (
                    MethodBase info, 
                    string msg
                )
            {
                string methodName =
                   "方法:"
                   + info.ReflectedType.FullName
                   + " "
                   + info.ToString();
    
                string message =
                    "发生异常:"
                    + msg;
    
                return new Exception(methodName + " " + message);
            }
    
    
            /// <summary>
            /// 枚举未知,对应的代码尚未实现的异常提示
            /// </summary>
            /// <param name="theEnum"></param>
            /// <returns></returns>
            public static Exception UnkownEnumMessage
                (
                    MethodBase info, 
                    System.Enum theEnum
                )
            {
                string methodName =
                   "方法:"
                   + info.ReflectedType.FullName
                   + " "
                   + info.ToString();
    
                string message =
                    "发生异常:"
                    + "枚举(" + GetEnumMessage(theEnum) 
                    + ")未知,对应的代码尚未实现。";
    
                return new Exception(methodName + " " + message);
            }
    
    
            /// <summary>
            /// 该方法或逻辑已经作废的异常提示
            /// </summary>
            /// <param name="info"></param>
            /// <returns></returns>
            public static Exception ToVoidMessage
                (
                    MethodBase info
                )
            {
                string methodName =
                   "方法:"
                   + info.ReflectedType.FullName
                   + " "
                   + info.ToString();
    
                string message =
                    "发生异常:该方法或代码逻辑已经作废";
    
                return new Exception(methodName + " " + message);
            }
    
    
            /// <summary>
            /// 该方法或逻辑尚未实现的异常提示
            /// </summary>
            /// <param name="info"></param>
            /// <returns></returns>
            public static Exception NoRealMessage(MethodBase info)
            {
                string methodName =
                  "方法:"
                  + info.ReflectedType.FullName
                  + " "
                  + info.ToString();
    
                string message =
                    "发生异常:该方法或代码逻辑尚未实现";
    
                return new Exception(methodName + " " + message);
            }
    
    
            /// <summary>
            /// 该方法或逻辑需要重载实现的异常提示
            /// </summary>
            /// <param name="info"></param>
            /// <returns></returns>
            public static Exception NeedOverrideMessage(MethodBase info)
            {
                string methodName =
                  "方法:"
                  + info.ReflectedType.FullName
                  + " "
                  + info.ToString();
    
                string message =
                    "发生异常:该方法需要重载实现。";
    
                return new Exception(methodName + " " + message);
            }
    
    
        }
    }
    
     
    
    

上一条:

下一条:


 

相关评论

评论加载中……
 

发表评论

类型:
内容:
  (Alt+Enter)