C# ExceptionExtensions 系统异常扩展类
系统异常扩展类 ExceptionExtensions
C# 全选
using System;
using System.Collections.Generic;
using System.Data.Entity.Validation;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSFramework.Workflow.Core.Extension
{
/// <summary>
/// 系统异常扩展类
/// </summary>
public static partial class ExceptionExtensions
{
/// <summary>
/// 扩展方法:获取异常信息
/// </summary>
/// <param name="ex">异常实例</param>
/// <param name="showStackTrace">获取堆栈信息</param>
/// <returns></returns>
public static string GetMessage(this Exception ex, bool showStackTrace = false)
{
StringBuilder sb = new StringBuilder();
GetExceptionMessage(ex, sb, showStackTrace, "");
return sb.ToString();
}
public static string GetMessage(this DbEntityValidationException ex)
{
//System.Data.Entity.Validation.DbEntityValidationException:
//“Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.”
//获取校验错误信息
StringBuilder sb = new StringBuilder();
foreach (DbEntityValidationResult err in ex.EntityValidationErrors)
{
sb.AppendLine("实体:" + err.Entry.Entity.GetType().FullName);
foreach (var x in err.ValidationErrors)
{
sb.AppendLine(x.ErrorMessage);
}
}
return sb.ToString();
}
/// <summary>
/// 获取AggregateException异常信息
/// </summary>
/// <param name="ex">异常实例</param>
/// <param name="showStackTrace">获取堆栈信息</param>
/// <returns></returns>
public static string GetExceptionMessage(AggregateException ex, bool showStackTrace = false)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("【异常类型】∶" + ex.GetType().Name);
sb.AppendLine("【异常信息】:" + ex.Message);
sb.AppendLine("【异常方法】:" + ex.TargetSite);
if (showStackTrace)
sb.AppendLine("【堆栈调用】:" + ex.StackTrace);
//内部异常
if (ex.InnerException != null)
{
sb.AppendLine("【InnerException】:" + ex.InnerException.Message);
if (ex.InnerException.InnerException != null)
sb.AppendLine(ex.InnerException.InnerException.Message);
}
//多个内部异常
if (ex.InnerExceptions != null && ex.InnerExceptions.Count > 0)
{
foreach (var e in ex.InnerExceptions)
{
sb.AppendLine(e.GetType().Name + "----------");
sb.AppendLine(GetExceptionMessage(e));
}
}
return sb.ToString();
}
/// <summary>
/// 获取异常信息
/// </summary>
/// <param name="ex">异常实例</param>
/// <param name="showStackTrace">获取堆栈信息</param>
/// <param name="Prefix"></param>
/// <returns></returns>
public static string GetExceptionMessage(Exception ex, bool showStackTrace = false, string Prefix = "")
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(Prefix + "【异常类型】∶" + ex.GetType().Name);
sb.AppendLine(Prefix + "【异常信息】:" + ex.Message);
sb.AppendLine(Prefix + "【异常方法】:" + ex.TargetSite);
if (showStackTrace)
sb.AppendLine(Prefix + "【堆栈调用】:" + ex.StackTrace);
//内部异常
if (ex.InnerException != null)
{
sb.AppendLine(Prefix + "【InnerException】:" + ex.InnerException.Message);
if (ex.InnerException.InnerException != null)
sb.AppendLine(ex.InnerException.InnerException.Message);
}
return sb.ToString();
}
/// <summary>
/// 获取异常信息
/// </summary>
/// <param name="ex"></param>
/// <param name="sb"></param>
/// <param name="showStackTrace">获取堆栈信息</param>
/// <param name="Prefix">前缀</param>
public static void GetExceptionMessage(Exception ex, StringBuilder sb, bool showStackTrace = false, string Prefix = "")
{
sb.Append(GetExceptionMessage(ex, showStackTrace, Prefix));
}
}
}
使用方法
C# 全选
try
{
//省略代码
}
catch (DbEntityValidationException ex)
{
var msg = ex.GetMessage();//获取异常消息
throw new Exception(msg);
}
catch (Exception ex)
{
var msg = ex.GetMessage();//获取异常消息
throw new Exception(msg);
}
异常提示窗体
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网