异常处理
2015-02-26 11:50:21 访问(1398) 赞(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);
}
}
}
上一条:
下一条:
相关评论
发表评论