学习之路二十三:利用委托减少Try/Catch

前段时间利用了一点空闲时间优化了项目中的代码,其中减少Try/Catch是这次优化的重点。

主要是参考了老A的大作:如何编写没有Try/Catch的程序,看了一下,老A主要介绍了怎么减少按钮事件中的Try/Catch,不过我们项目是WCF,基本上就没有按钮事件,不过老A也提供了一个很好的思路,那就是利用委托动态的为每个方法加上Try/Catch,有了这个思路之后就很好做了。

核心代码:

 1         private T InvokeHandler<T>(string clientName, string methodName, Delegate delegateWarpper, object[] parameters)
 2         {
 3             try
 4             {
 5                 //这边关于第一个参数要注意一下
 6                 //当委托绑定的方法是静态的,那么就可以传“null”
 7                 //如果绑定的方法不是静态的,就必须传当前方法的实例才行,也就是 -- delegateWarpper.Target
 8                 //如果还不懂,直接MSDN查找,我也是看MSDN的
 9                 return (T)delegateWarpper.Method.Invoke(delegateWarpper.Target, parameters);
10             }
11             catch (TargetInvocationException exception)
12             {
13                 Console.WriteLine(exception.InnerException.Message + Environment.NewLine + exception.InnerException.StackTrace);
14             }
15             return default(T);
16         }

原有的调用方式:

 1         public List<string> GetNames(string clientName)
 2         {
 3             //如果每个方法都这样写,那么就要有很多相似的Try/Catch代码
 4             //不仅写了很多多余的代码,有使得代码不够优美了
 5             try
 6             {
 7                 return new List<string>() { "12" };
 8             }
 9             catch (Exception exception)
10             {
11                 Console.WriteLine(exception.Message + Environment.NewLine + exception.StackTrace);
12             }
13             return null;
14         }

现在的调用方式:

1         public List<string> GetNames(string clientName)
2         {
3             //首先定义委托绑定的方法
4             //可以使用.NET Framework中自带的Action和Func委托
5             Func<List<string>> func = () => new List<string> { "12" };
6             //然后调用助手方法就可以了
7             return InvokeHandler<List<string>>(clientName, "GetNames", func, null);
8         }

 

通过旧的和新的调用方式比较,发现代码有了很大的缩减,而且从代码整洁的角度来看新的调用方式更加优美。

这个方法不是万能的,不过应对80%的情况还是没有问题滴!

好了,如果园友很有什么好的看法,提出来分享下,Thanks.......  

最后祝大家2013春节快乐!

以同步至:个人文章目录索引

转载于:https://www.cnblogs.com/yangcaogui/archive/2013/02/03/2890862.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值