2.C#中通过委托Func消除重复代码

阅读目录
   一:重复的代码

 二: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 = 30;
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 = 5000;
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 = 30;
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 = 5000;
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     }


  

时间: 2024-11-08 15:13:18

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

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

相信小伙伴在使用RXJava与Retrofit请求网络时,都有遇到过这样的场景,在IO线程请求网络解析数据,接着返回主线程setData.更新View试图,那么也肯定熟悉下面这几句代码: .subscribeOn(Schedulers.io()) .unsubscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(subscriber); 如果网络请求的次数比较少, 作为一名不拘小节(懒癌)的

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

今天我要说的是C#中的三种委托方式:Func委托,Action委托,Predicate委托以及这三种委托的常见使用场景. Func,Action,Predicate全面解析 首先来说明Func委托,通过MSDN我们可以了解到,Func委托有如下的5种类型: (1) *delegate TResult Func<TResult>(); (2)*delegate TResult Func<T1,TResult>(T1 arg1); (3) *delegate TResult Func&

java去除字符串中重复、不重复、消除重复后字符

import java.util.HashSet;import java.util.Set; public class Main { public static void main(String[] args) { String str = "aaasd"; System.out.println("原字符串: "+str); Set<Character> set1 = new HashSet<Character>(); Set<Char

浅谈C#中常见的委托&lt;Func,Action,Predicate&gt;(转)

http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html 一提到委托,浮现在我们脑海中的大概是听的最多的就是类似C++的函数指针吧,呵呵,至少我的第一个反应是这样的. 关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微,尤其是张子阳的那一篇.我就不用多废话了. 今天我要说的是C#中的三种委托方式:Func委托,Action委托,Predicate委托以及这三种委托的常见使用场景. Func,Action,Predi

格式化结果集-消除重复行

如果想让某一列中的值只显示一次,可以使用DISTINCT来实现这一功能,下面就用northwind数据库中的products表中的CategryID这一列来进行这一操作. 在这之前我们用order by语句来将categroyID进行升序排列:如图1: 图1 从图1种可以看到CategoryID列中有很多1和2,那么我们接下来要在select语句中添加distinct,会有什么效果呢??如图2: 图2 图2中的语句的意思,就是在结果集中只显示categoryID列中的信息,并且要消除重复行,并且

委托, 泛型委托,Func&lt;T&gt;和Action&lt;T&gt;

使用委托来做一些事情,大致思路是: 1.定义声明一个委托,规定输入参数和输出类型.2.写几个符合委托定义的方法.3.把方法列表赋值给委托4.执行委托 internal delegate int MyDelegate(); class Program { static void Main(string[] args) { MyDelegate d = ReturnOne; d += ReturnTwo; foreach (int i in GetAllReturnVals(d)) { Consol

C#中Action和Func的区别

本文实例分析了C#中Action和Func的区别,有助于读者牢固掌握并对其准确使用.具体分析如下: 先来看下面这段代码: //测试使用的公共值 int num = 10; //测试Func委托 Func<int, int> f; f = (int tempf) => { return tempf + 1; }; Response.Write(f(num).ToString()+"<br />"); //调用f委托,并打印相应的值! //测试Action委托

维护序列项顺序的同时消除重复项

在序列中,经常会碰到有重复项的情况,有时需要消除重复的项. 解决方案:使用set来构造无重复数据项类型.如: a = [1, 5, 2, 1, 9, 1, 5, 10] >>> set(a) {1, 2, 10, 5, 9} 使用set构造数据后,原始的序列元素失去了当初的相对顺序.同时简单的使用set会有另一个问题:可哈希.我们知道,像list中包含list或dict等符合类型且作为set的构造函数参数进行set对象创建时,会有以下报错: >>> c = [{'x':

C#中利用委托实现多线程跨线程操作

在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了保证线程安全以及提高代码的效率所做的改进,但是也给大家带来很多不便. 其实解决这个问题有两种方法:一,是通过设置System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;在你的程序初始化的时候设置了这个属性,而且在你的控件中使用的都是微软Framework类库中的控件的话,系统就不会再抛出你上面所说的