阅读目录
   一:重复的代码

 二:C#中通过委托Func消除重复代码

一:重复代码
   

  1. public class Persion
  2. {
  3. public string Name { get; set; }
  4. public int Age { get; set; }
  5.  
  6. public Persion GetPersionInfo()
  7. {
  8. try
  9. {
  10. Persion persion = new Persion();
  11. persion.Name = "David";
  12. persion.Age = ;
  13.  
  14. return persion;
  15. }
  16. catch (Exception ex)
  17. {
  18. return null;
  19. }
  20. }
  21. }
  1. public class Employee
  2. {
  3. public string Post { get; set; }
  4. public int Salary { get; set; }
  5.  
  6. public Employee GetEmployeeInfo()
  7. {
  8. try
  9. {
  10. Employee employee = new Employee();
  11. employee.Post = "开发";
  12. employee.Salary = ;
  13.  
  14. return employee;
  15. }
  16. catch(Exception ex)
  17. {
  18. return null;
  19. }
  20. }
  21. }

  二:C#中通过委托Func消除重复代码
     
如下所示,try catch 语句只有一次了,这样就消除了GetPersionInfo方法和GetEmployeeInfo的try catch语句

  1. public class Utillity
  2. {
  3. public static T TryExecute<T>(Func<T> func, string methodName)
  4. {
  5. try
  6. {
  7. return func();
  8. }
  9. catch (Exception ex)
  10. {
  11. Console.WriteLine("MethodName:" + methodName + " Error:" + ex.Message);
  12. return default(T);
  13. }
  14. }
  15. }
  1. public class Persion
  2. {
  3. public string Name { get; set; }
  4. public int Age { get; set; }
  5.  
  6. public Persion GetPersionInfo()
  7. {
  8. return Utillity.TryExecute<Persion>(() =>
  9. {
  10. Persion persion = new Persion();
  11. persion.Name = "David";
  12. persion.Age = ;
  13.  
  14. return persion;
  15. }
  16. , "GetPersionInfo");
  17. }
  18. }
  1. public class Employee
  2. {
  3. public string Post { get; set; }
  4. public int Salary { get; set; }
  5.  
  6. public Employee GetEmployeeInfo()
  7. {
  8. return Utillity.TryExecute(() =>
  9. {
  10. Employee employee = new Employee();
  11. employee.Post = "开发";
  12. employee.Salary = ;
  13.  
  14. return employee;
  15. }
  16. , "GetEmployeeInfo");
  17.  
  18. }
  19. }
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. Persion persion1 = new Persion();
  6. Persion persion2 = persion1.GetPersionInfo();
  7.  
  8. Console.WriteLine("This persion name is {0}", persion2.Name);
  9. Console.WriteLine("This persion age is {0}", persion2.Age);
  10.  
  11. Employee employee1 = new Employee();
  12. Employee employee2 = employee1.GetEmployeeInfo();
  13.  
  14. Console.WriteLine("This employee post is {0}", employee2.Post);
  15. Console.WriteLine("This employee salary is {0}", employee2.Salary);
  16.  
  17. Console.ReadLine();
  18. }
  19. }


  

2.C#中通过委托Func消除重复代码的更多相关文章

  1. 1.C#中通过委托Action消除重复代码

    阅读目录 一:重复的代码  二:使用委托消除重复代码     一:重复的代码    我们在写一些方法的时候,会在里面可能出现异常的地方使用try catch语句,这样每个方法都会有try catch语 ...

  2. 使用#include消除重复代码

    消除重复代码代码很多种,比如: 1)提炼成函数复用 2)使用宏 3)继承 4)使用闭包(boost::bind.boost::function) 上述是最为常用的,对于C++程序,闭包可能用得相对少一 ...

  3. c#中,委托Func的简单实践

    c# 委托Func的简单实践最近才真正的接触委托,所以针对Func类型的委托,做一个实践练习. 首先说一些我对委托的初级理解:"就是把方法当做参数,传进委托方法里". 我平时用到的 ...

  4. Metalama简介2.利用Aspect在编译时进行消除重复代码

    上文介绍到Aspect是Metalama的核心概念,它本质上是一个编译时的AOP切片.下面我们就来系统说明一下Metalama中的Aspect. Metalama简介1. 不止是一个.NET跨平台的编 ...

  5. 【译】利用Lombok消除重复代码

    当你在写Getter和Setter时,一定无数次的想过,为什么会有POJO这么烂的东西.你不是一个人!(不是骂人-)无数的开发人员花费了大量的时间来写这种样板代码,而他们本来可以利用这些时间做出更有价 ...

  6. Android 勤用RXJava compose操作符消除重复代码

    相信小伙伴在使用RXJava与Retrofit请求网络时,都有遇到过这样的场景,在IO线程请求网络解析数据,接着返回主线程setData.更新View试图,那么也肯定熟悉下面这几句代码: .subsc ...

  7. 代码的坏味道(14)——重复代码(Duplicate Code)

    坏味道--重复代码(Duplicate Code) 重复代码堪称为代码坏味道之首.消除重复代码总是有利无害的. 特征 两个代码片段看上去几乎一样. 问题原因 重复代码通常发生在多个程序员同时在同一程序 ...

  8. C#中常见的委托(Func委托、Action委托、Predicate委托)

    今天我要说的是C#中的三种委托方式:Func委托,Action委托,Predicate委托以及这三种委托的常见使用场景. Func,Action,Predicate全面解析 首先来说明Func委托,通 ...

  9. 使用枚举类Enum作为callee和caller的约定,运用反射消除分支和重复代码在命令式程序中的应用

    在开发过程中,程序提供的功能由简单变得复杂,承担功能的主要类也会因此变得庞大臃肿,如果不加以维护,就会散发出浓重的代码味道.下面这篇博文,主要讲述了利用Enum,反射等手段简化重构代码的过程. 代码涉 ...

随机推荐

  1. NX 8.5 License Server Firewall Setting

    Reference: http://eng-tips.com/viewthread.cfm?qid=284511 The FLEXNet Server(lmgrd) listens to 28000 ...

  2. day4----生成器,迭代器

    迭代器,生成器,装饰器 1.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要 ...

  3. JAVA的String的传值和传地址问题

    关于Java的String类型,可能你会碰到这种情况,将String类型的变量传到一个函数,在这个函数中修改变量的值,但是,实参的值并没有发生改变. Java中String的传值/传地址问题: 例子引 ...

  4. 《Linux内核设计与实现》读书笔记(十五)- 进程地址空间(kernel 2.6.32.60)

    进程地址空间也就是每个进程所使用的内存,内核对进程地址空间的管理,也就是对用户态程序的内存管理. 主要内容: 地址空间(mm_struct) 虚拟内存区域(VMA) 地址空间和页表 1. 地址空间(m ...

  5. 国内CDN公共库

    CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用.与将JS库存放在服务器单机上相比,CDN公共库更加稳定.高速.一般的CDN公共库都会包含全球所有最流行的开源JavaScrip ...

  6. Url转Link的C#正则表达式

    网上关于Url转链接(href)的正则表达式一搜一大堆,但真正好用的没几个. 后来在Matthew O'Riordan的Blog上发现一个很好用的正则表达式,是用Javascript写的,代码如下: ...

  7. JavaScript严谨模式(Strict Mode)

    下面的内容翻译自It’s time to start using JavaScript strict mode,作者Nicholas C.Zakas参与了YUI框架的开发,并撰写了多本前端技术书籍,在 ...

  8. Twitter API升级至1.1

    Twitter API 1.1是至今最大的一次升级,从3月份提出,到6月11日1.0版本已经全面停止调用.关于1.1版本升级特性可访问: https://dev.twitter.com/docs/ap ...

  9. [游戏模版6] Win32 graph

    >_<:there in the MyPaint(...) function respectively use Ellipse(...) draw ellipse, use RoundRe ...

  10. iOS开发-图片高斯模糊效果

    iOS开发的时候有的时候需要将图片设置模糊,或者通过点击下拉方法,去除模糊,一切都是为了应用更受用户欢迎,iOS7之后半透明模糊效果得到大范围使用的比较大,现在也可以看到很多应用局部用到了图片模糊效果 ...