委托是我们C#开发当中使用频率非常的高一个手段,好处我就不列举了。

委托早期版本中只有delegate,后期版本有了Func(有返回值)和Action(无返回值)两委托方法。

我这里将列举它们三个常用的表现方式,还是老规矩上代码:

  1. class Program
  2. {
  3. private delegate int GetSum(List<Product> list); // First Definition Delegate
  4. static void Main(string[] args)
  5. {
  6. //C# delegate
  7.  
  8. List<Product> list = new List<Product>()
  9. {
  10. new Product{ProductName="Iphone4s", Price=},
  11. new Product{ProductName="Iphone5",Price=},
  12. new Product{ProductName="Ipad4",Price=}
  13. };
  14. GetSum s = GetTotal;
  15. Console.WriteLine(s(list));
  16.  
  17. //C# Func
  18.  
  19. //Method A
  20. Func<List<Product>, int> func = GetTotal;
  21. Console.WriteLine(func(list));
  22.  
  23. //Method B
  24. Func<List<Product>, int> func1 = delegate(List<Product> listA)
  25. {
  26.  
  27. return listA.Sum(p => p.Price);
  28. };
  29. Console.WriteLine(func1(list));
  30.  
  31. //Method C
  32. Func<List<Product>,int> func2=listB=>{
  33.  
  34. return listB.Sum(p => p.Price);
  35. };
  36. Console.WriteLine(func2(list));
  37.  
  38. //C# Action
  39.  
  40. Action<List<Product>> action = listC =>
  41. {
  42. listC.ForEach(p => Console.WriteLine(p.Price));
  43. };
  44.  
  45. action(list);
  46. Console.Read();
  47.  
  48. }
  49.  
  50. public static int GetTotal(List<Product> list)
  51. {
  52. return list.Select(p => p.Price).Sum();
  53. }
  54. }
  55.  
  56. public class Product
  57. {
  58. public string ProductName{get;set;}
  59. public int Price{get;set;}
  60. }

delegate、Func、Action几个常用手法的更多相关文章

  1. delegate Func Action Expression

    using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; na ...

  2. C#中匿名函数、委托delegate和Action、Func、Expression、还有Lambda的关系和区别

    以前一直迷迷糊糊的,现在总算搞明白. Lambda表达式 Lamda表达式基本写法是()=>{ };Lambda和方法一样都可以传入参数和拥有返回值.(int x)=>{return x; ...

  3. C# delegate event func action 匿名方法 lambda表达式

    delegate event action func 匿名方法 lambda表达式 delegate类似c++的函数指针,但是是类型安全的,可以指向多个函数, public delegate void ...

  4. 浅谈C#中常见的委托<Func,Action,Predicate>(转)

    一提到委托,浮现在我们脑海中的大概是听的最多的就是类似C++的函数指针吧,呵呵,至少我的第一个反应是这样的. 关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微,尤其是张子阳的那一篇.我就不 ...

  5. C#基础-Func,Action

    Func,Action 的介绍及其用法 Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如 ...

  6. [转载]C#基础-Func,Action

    Func,Action 的介绍及其用法 Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如 ...

  7. 系统内置委托:Func/Action

    lSystem.Func 代表有返回类型的委托 lpublic delegate TResult  Func<out TResult>(); lpublic delegate TResul ...

  8. C# Task中的Func, Action, Async与Await的使用

    在说Asnc和Await之前,先说明一下Func和Action委托, Task任务的基础的用法 1. Func Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate, ...

  9. C#的泛型委托Predicate/Func/Action

    Predicate<T> 是一个委托,它代表了一个方法,它的定义是: namespace System {    // 摘要:    表示定义一组条件并确定指定对象是否符合这些条件的方法. ...

随机推荐

  1. 每日英语:Why Food Companies Are Fascinated by the Way We Eat

    Are you a cruncher? Or a 'smoosher'? cruncher:咬嚼者,咬碎 Some people crave the perfectly crispy crunch o ...

  2. FZU Problem 2105 Digits Count

    Problem Description Given N integers A={A[0],A[1],...,A[N-1]}. Here we have some operations: Operati ...

  3. Livepool

    LivePool Fiddler Like cross platform debugging proxy for web developers base on NodeJS LivePool 是一个基 ...

  4. c++之五谷杂粮---3

    3.1如果同一作用域内的几个函数名字相同但形参列表不同,我们称之为重载函数. 3.1.1不允许两个函数除了返回类型外所有的要素都相同.(这也是很好解释的) #include<iostream&g ...

  5. 一款纯css3实现的颜色渐变按钮

    之前为大家分享了推荐10款纯css3实现的实用按钮,今天给大家带来一款纯css3实现的颜色渐变按钮.这款按钮的边框和文字的颜色通过css3实现两种颜色的渐变,效果非常好看,一起看下效果图: 在线预览  ...

  6. linux命令--vi,vim

    进入vi的命令  vi filename :打开或新建文件,并将光标置于第一行首  vi +n filename :打开文件.并将光标置于第n行首  vi + filename :打开文件.并将光标置 ...

  7. 未找到与约束ContractName,无法打开项目的解决方案

    如果VS2013,在打开解决方案时,报如下错误: “未找到与约束 ContractName Microsoft.Internal.VisualStudio.PlatformUI.ISolutionAt ...

  8. Homebrew 的安装方法(官方的方法老师安装失败) 第三方

    官网:http://brew.sh/index_zh-cn.html 安装方式见 官网,在shell里执行如下语句,如下:ruby -e "$(curl -fsSL https://raw. ...

  9. [转]Private Libraries、Referenced Libraries、Dependency Libraries的区别

    一.v4.v7.v13的作用和用法 1.Android Support V4, V7, V13是什么? 本质上就是三个java library. 2.为什么要有support库?   是为了解决软件的 ...

  10. Android Studio:Multiple dex files define Landroid/support/annotation/AnimRes

    近期真的比較忙,一不小心博客又荒了两个月. 从今天起.决定重返csdn,多多纪录和分享. 先从一个近期被折磨的死去活来的问题. 由于升级了V4包,就一直报这个问题: com.android.dex.D ...