扩展方法 --- 异常处理

扩展方法: 异常处理。

通常我们写异常经常在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 很不错!

时间: 2024-10-09 11:11:07

扩展方法 --- 异常处理的相关文章

C#的扩展方法解析

在使用面向对象的语言进行项目开发的过程中,较多的会使用到"继承"的特性,但是并非所有的场景都适合使用"继承"特性,在设计模式的一些基本原则中也有较多的提到. 继承的有关特性的使用所带来的问题:对象的继承关系实在编译时就定义好了,所以无法在运行时改变从父类继承的实现.子类的实现与它父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化.当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写它或被其他更适合的类替换,这种依赖关系限制

C#扩展方法应用之 try catch finally 封装

本文将介绍如何利用扩展方法将 try catch finally 语句块简化成如下的调用形式: public void Test1() { Employee emp = new Employee(); emp.Try(p => p.Work()) .Catch(e => HandleException(e)) .Finally(p => p.Rest()); } 虽然这样做似乎节省不了太多代码,但看起来更工整一点.下面介绍如何实现: 一. try public class TryUnit

c# 扩展方法奇思妙用基础篇五:Dictionary&lt;TKey, TValue&gt; 扩展

Dictionary<TKey, TValue>类是常用的一个基础类,但用起来有时确不是很方便.本文逐一讨论,并使用扩展方法解决. 向字典中添加键和值 添加键和值使用 Add 方法,但很多时候,我们是不敢轻易添加的,因为 Dictionary<TKey, TValue>不允许重复,尝试添加重复的键时 Add 方法引发 ArgumentException. 大多时候,我们都会写成以下的样子: var dict = new Dictionary<int, string>()

C#3.0 扩展方法

扩展方法 在很多时候我们需要编写各种各样的帮助类,因为官方提供的再全面,也会有未包含到的地方,这时一个静态的帮助类就可以帮我们解决问题 举一个不是很恰当的例子,假如要对一个字符串进行验证其内容不为null并且等于admin但是很多地方都要调用,按照封装思想要封装成一个方法,看起来可能是下面这样子的 这并没有任何问题,代码也是比较简单,但是很难会有一种亲近感,因为StringiHelper.ValidArg这样的调用存在.比如这个验证应该是官方应该考虑到的,但是他们忽略了,编写这样一个扩展后会有很

c# 之DataTable的扩展方法

由于太懒了,很久没更新了.毕业了,得好好装逼学习了,不能一心想着完了. 由于公司中的项目大量的使用DataTable,而每次对datatable进行操作的时候需要写很多相同的代码,所以秉着 装逼而学习 的态度,于是撸了几个扩展方法,记录下来,学习下.     class Program     {         public DataTable LinqTable = new DataTable();         void AddNewRow(int id, string name)   

Entity Framework DbSet&lt;T&gt;之Include方法与IQueryable&lt;T&gt;扩展方法Include的使用

Entity Framework使用Code First方式时,实体之间已经配置好关系,根据实际情况某些情况下需要同时获取导航属性,比如获取商品的同时需要获取分类属性(导航属性),或者基于优化方面考虑等,下面来看一个例子 例子中有会员实体类(Member)与角色实体类(Role),Role与Member的关系是1:n,控制台应用程序代码如下: using System; using System.Collections.Generic; using System.Linq; using Syst

C#中的扩展方法

在java中没有这样的东西,一个类一旦是 final的 ,这个类就不能再被添加方法, 但是C#能够做到,可以给 sealed 类添加新的方法,这点我还是比较喜欢c#的. 这就是C#中的扩展方法. 那么什么情况下我们才需要去给一个类写扩展方法呢? 系统自带的类型,我们无法去修改: 修改源代码需要较大的精力,而且可能会带来错误: 我们只是需要一个或者较少的几个方法,修改源代码费时费力: 被扩展的类是sealed的,不能被继承:(就算不是sealed的,我们也不能因为需要一个方法而去写一个子类,这样不

ABP框架源码中的Linq扩展方法

文件目录:aspnetboilerplate-dev\aspnetboilerplate-dev\src\Abp\Collections\Extensions\EnumerableExtensions.cs using System; using System.Collections.Generic; using System.Linq; namespace Abp.Collections.Extensions { /// <summary> /// Extension methods for

Unity中使用扩展方法解决foreach导致的GC

对于List这种顺序表,我们解决的时候还是可以使用for代替foreach即可.但是对于非顺序表,比如Dictionary或者Set之类,我们可以扩展方法Foreach,ForeachKey和ForeachValue来代替原有的foreach. 关于扩展方法,可参考:https://msdn.microsoft.com/zh-cn/library/bb383977.aspx static class DictionaryEx { /// <summary> /// 提供一个方法遍历所有项 //