Func代理是啥?

Func代理接收0个或多个参数,返回TResult值

以Func<TSource, TResult>为例:Func带来封装一个方法,该方法接收一个参数,然会一个TResult类型。

举个最简单的例子,求一个一维整数数组的和

private static void Demo()
{
Func<int[], int> MySum = arr =>
{
int total = ;
foreach (int i in arr)
total += i; return total;
}; int[] data = new int[] { , , , , , , , , , };
int result = MySum(data); Console.WriteLine(result);
}

Sum

OK,我们继续,如果我们希望复杂一点:先对数组过滤,然后求和,那么我们的代码应该如下:

private static void Demo3()
{ int[] data = new int[] { , , , , , , , , , };
int result = data.FilterAndSum(a => a > ); Console.WriteLine(result);
} public static class MyExtension
{
public static int FilterAndSum(this int[] source, Func<int, bool> selector)
{
int total = ;
foreach (int s in source)
if (selector(s))
total += s; return total;
}
}

FilterAndSum

如果,我们希望我们的扩展方法,可以支持更改多的类型,那么我们可以这样的实现扩展方法

public static int SelectAndSum<TSource>(this IList<TSource> source, Func<TSource, int> selector)
{
int total = ; foreach (TSource s in source)
total += selector(s); return total;
} ...... private static void Demo()
{
IList<Staff> list = new List<Staff> {
new Staff{FirstName="AAA", LastName="", Salary=},
new Staff{FirstName="BBB", LastName="", Salary=}
};
int result = list.SelectAndSum(s => s.Salary); Console.WriteLine(result);
}

Generic Extend method

另外,如果我们想自己扩展IEnumerable,那么现在我们就知道应该这样:

public static IEnumerable<TSource> CustomMethod<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> selector)
{
foreach(TSource s in source)
if(selector(s))
yield return s;
}
... private static void Demo4()
{
IList<Staff> list = new List<Staff> {
new Staff{FirstName="Tom", LastName="Ng", Salary=},
new Staff{FirstName="Simon", LastName="Wong", Salary=}
}; IEnumerable<Staff> list2 = list.CustomMethod(s => s.Salary > ); Console.WriteLine(list2.Count());
}

Extend IEnumerable

那么Action代理呢

Action代理不返回值,它可以接受一个或多个参数。

那么Delegete类呢?

代理就是一个指向某个类的静态方法,或者指向实例类的实例方法。

那么代理呢?

代理是定义了方法签名的类型。当你实例化一个代理类型时,你可以把该代理实例指向与代理签名相兼容的方法。然后通过代理实例调用所指向的方法

C#代理那点事儿的更多相关文章

  1. 设计模式-代理模式(Proxy Model)

    文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/5988145.html 目录 1.写在前面 2.概述 3.目的 4.结构组成 5.实现 5 ...

  2. 【原创】JDK动态代理,此次之后,永生难忘。

    动态代理,这个词在Java的世界里面经常被提起,尤其是对于部分(这里强调“部分”二字,因为有做了一两年就成大神的,实力强的令人发指,这类人无疑是非常懂动态代理这点小伎俩的)做了一两年新人来说,总是摸不 ...

  3. JDK动态代理,此次之后,永生难忘

    出自:http://www.cnblogs.com/dreamroute/p/5273888.html#3839242 首先感谢"神一样的存在"的文章! 动态代理,这个词在Java ...

  4. springIOC的那些事

       springIOC动态代理的那些事儿 1.发现问题 今天在使用spring的IOC容器时发现了这样的一个问题: 首先有一个接口定义如下: public interface BookShopSer ...

  5. PHP-客户端的IP地址伪造、CDN、反向代理、获取的那些事儿

    外界流传的JAVA/PHP服务器端获取客户端IP都是这么取的: 伪代码: 1)ip = request.getHeader("X-FORWARDED-FOR")     可伪造,参 ...

  6. 关于Java代理那些事儿

    代理是啥?就是代替你执行你持有的主要功能,并且能在你的基础之上完成一些其他的功能.代理的目的就是生成一个和原对象具有同样功能的对象.在Java中,代理是一种设计模式.在Spring的面向切面编程(AO ...

  7. webpack 教程 那些事儿04-webpack项目实战分析

    这节主要讲解真正项目用用到的 webpack配置问题,项目实战篇 就像我们不会完全做一个项目,不用别人的轮子一样.这个配置我们借用 vue-cli 搭建的配置来研究,因为它已经足够优秀. 有了前面的基 ...

  8. 豌豆夹Redis解决方式Codis源代码剖析:Proxy代理

    豌豆夹Redis解决方式Codis源代码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描写叙述: Codis is a proxy b ...

  9. 豌豆夹Redis解决方案Codis源码剖析:Proxy代理

    豌豆夹Redis解决方案Codis源码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描述: Codis is a proxy base ...

随机推荐

  1. [原] XAF 如何将数据库中Byte array图片显示出来

    问题比较简单,直接上代码. private Image _Cover; [Size(SizeAttribute.Unlimited), ValueConverter(typeof(ImageValue ...

  2. [原] XAF 如何非常容易禁止清除一个下拉字段的值?

  3. International Conference in 2014

    International Conference on Machine Learning (ICML2014, Beijing).(papers are available) Neural Infor ...

  4. 微软BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server)

    [公告]本博客于2015年10月起不再更新 新博客文章主要发表在商业智能BI社区: http://www.flybi.net/blog/biwork 博客地图自动分类 文章目录方便更好的导航,阅读文章 ...

  5. 高德地图iOS SDK限制地图的缩放比例

    问题 高德地图的iOS SDK 3D版中(v2.4.0), 显示范围在560m左右时建筑会呈现3D效果. 我们有没有办法可以限制地图最小缩放到这个比例, 从而保证建筑始终使用3D效果显示呢? 探索 高 ...

  6. ROCK 聚类算法‏

    ROCK (RObust Clustering using linKs)  聚类算法‏是一种鲁棒的用于分类属性的聚类算法.该算法属于凝聚型的层次聚类算法.之所以鲁棒是因为在确认两对象(样本点/簇)之间 ...

  7. GeoHash核心原理解析

    http://www.cnblogs.com/LBSer/p/3310455.html 引子 机机是个好动又好学的孩子,平日里就喜欢拿着手机地图点点按按来查询一些好玩的东西.某一天机机到北海公园游玩, ...

  8. linxu ffmpeg 编译安装

    1.下载ffmpeg. 下载网址:http://www.ffmpeg.org/download.html 2.解压缩 tar -zxvf ffmpeg-2.0.1.tar.gz 3.配置,生成Make ...

  9. css3多列显示

    columen-width:定义单列显示的宽度.初始值是auto,适用于不可替代的块级元素,行内块元素和单元格,表格元素除外. 目前Webkit引擎支持-webkit-column-width,Moz ...

  10. Django项目深入理解

    python应用松耦合比方说,考虑有一个以前写的视图函数,这个函数显示当前日期和时间.如果我们想把它的URL 从原来的 /time/ 改变到/currenttime/ ,我们只需要快速的修改一下URL ...