首页 > 技术文章 > 扩展方法 --- 异常处理

liuyunsheng 2015-02-11 17:15 原文

扩展方法: 异常处理。

通常我们写异常经常在function内容添加Try catch..  在方法过多的时候这么写确实不是什么好办法。

介绍一下我的扩展处理。 可能大家都是这么用的。会用的路过就剋以了。 不会的可以学习一下。

扩展代码如下 :

public static class ExceptionHelper
    {
        /// <summary>
        /// Exes the try asynchronous.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fun">The fun.</param>
        /// <param name="errorMessage">The error message.</param>
        /// <returns></returns>
        /// <exception cref="System.Exception"></exception>
        public static async Task<T> ExTryAsync<T>(Func<Task<T>> fun, string errorMessage)
        {
            try
            {
                return fun().Result;
            }
            catch (Exception ex)
            {
                throw new Exception(errorMessage + "---->" + ex.Message);
            }
        }

        /// <summary>
        /// Exes the try.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fun">The fun.</param>
        /// <param name="errorMessage">The error message.</param>
        /// <returns></returns>
        /// <exception cref="System.Exception"></exception>
        public static T ExTry<T>(Func<T> fun, string errorMessage)
        {
            try
            {
                return fun();
            }
            catch (Exception ex)
            {
                throw new Exception(errorMessage + "---->" + ex.Message);
            }
        }

        /// <summary>
        /// Exes the try.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fun">The fun.</param>
        /// <param name="defaultValue">The default value.</param>
        /// <returns></returns>
        public static T ExTry<T>(Func<T> fun, T defaultValue)
        {
            try
            {
                return fun();
            }
            catch (Exception ex)
            {
                LogWriter.Error(ex);
                return defaultValue;
            }
        }
    }

使用方法:

    public string GetValue()
    {
        LogHelperExtensions.Info("Object -> GetValue ");
        var baseValue = new BaseValue { State = false, Value = null, ErrDes = "系统服务异常!" };
        return ExceptionHelper.ExTry(() =>
        {
            //自己的业务逻辑
            return baseValue;
        }, baseValue);
    }

可以看到 我们通过异常扩展我们可以将每一个方法体内容处理日志信息。更好的维护了项目的异常管理。

服务级别产生了bug我们也可以直接通过日志查询。

 

多说句 微软的 Async 很不错!

 

推荐阅读