delegate实现Javascript的each方法
C#如何用delegate实现Javascript的each方法
C#中有很多易混淆的关键词,例如delegate,Func, Action和 Predicate。Func, Action和 Predicate本质上都是delegate,下面看一下delegate概念。
1 delegate概念
delegate本质上就是一个指向函数的指针,可以指向不同的函数,只要函数的签名和代理一致即可。
2 delegate应用
其实Func, Action, Predicate等都是delegate,只是特殊的delegate而已。delegate的巧妙应用,可以大大简化代码和提高灵活性。下面有一段Javascript代码,JS中经常使用数组的each方法来遍历数组并对其进行处理,如下所示:
1 var arr = [ "one", "two", "three", "four"];
2 $.each(arr, function(){
3 alert(this);
4 });
5 //上面这个each输出的结果分别为:one,two,three,four
那么在C#中如何通过delegate来定义一个数组each方法呢,可以通过传入方法来实现灵活的逻辑处理,静态ListEx类下有一个静态的Each方法,定义如下:

1 public static T[] Each<T>(T[] source, Func<T, T> function)
2 {
3
4 T[] ret =new T[source.Length];
5 int i = 0;
6 foreach (T item in source)
7 {
8 ret[i]=function(item);
9 i++;
10 }
11 return ret;
12 }

那么我们可以定义一个字符串数组,并定义一个delegate作为函数参数进行传入,调用ListEx.Each方法:
1 var arr =new string[]{ "one", "two", "three", "four"};
2 var newArr= ListEx.Each<string>(arr,delegate(string x){
3 x=x+"_do";
4 return x;
5 });
当然可以用表达式进行简化:
1 var newArr2 = ListEx.Each<string>(newArr, (string x) => x = x + "_do");
我们也可以定义一个Where方法来过滤数组:

1 public static IList<T> Find<T>(IList<T> source, Predicate<T> predicate)
2 {
3 List<T> ret = new List<T>();
4 foreach (T item in source)
5 {
6 if (predicate(item))
7 {
8 ret.Add(item);
9 }
10 }
11 return ret;
12 }
13 public static T[] Where<T>(T[] source, Predicate<T> predicate)
14 {
15 IList<T> list=source.ToList<T>();
16 IList<T> retList= Find<T>(list, predicate);
17 return retList.ToArray<T>();
18 }

调用如下:
1 var newArr3 = ListEx.Where<string>(arr, x => x == "two");
3 区别概述
Func是必须指定返回值的代理;
Action为返回值为void的代理;
Predicate为返回值为bool的代理;
出处:http://www.cnblogs.com/isaboy/
delegate实现Javascript的each方法的更多相关文章
- C#如何用delegate实现Javascript的each方法
C#中有很多易混淆的关键词,例如delegate,Func, Action和 Predicate.Func, Action和 Predicate本质上都是delegate,下面看一下delegate概 ...
- Javascript对象的方法赋值
Javascript对象编程学习中,一直不能很好的掌握对象的属性(property)和方法(method).今天在写代码过程中,又犯了一个低级错误. <!DOCTYPE html> < ...
- JavaScript中reduce()方法
原文 http://aotu.io/notes/2016/04/15/2016-04-14-js-reduce/ JavaScript中reduce()方法不完全指南 reduce() 方法接收 ...
- 两种动态加载JavaScript文件的方法
两种动态加载JavaScript文件的方法 第一种便是利用ajax方式,第二种是,动静创建一个script标签,配置其src属性,经过把script标签拔出到页面head来加载js,感乐趣的网友可以看 ...
- 用jQuery之后,之前javascript的一些方法就不能用了吗
用jQuery之后,之前javascript的一些方法就不能用了吗? 比如$("#btn").onclick = function(){}这种用法?或者$("#btn&q ...
- html,JavaScript调用winfrom方法
---恢复内容开始--- 目的: 在动画上面添加点击事件,通过JavaScript调用winfrom方法 1.创建一个页面 using System; using System.Collections ...
- 在C#中模拟Javascript的setTimeout方法
在C#中模拟Javascript的setTimeout方法 背景 每种语言都有自己的定时器(Timer),很多人熟悉Javascript中的setInterval和setTimeout,在Javasc ...
- JavaScript创建对象的方法
显示在浏览器中的控制台中. <script type="text/javascript"> //这个工厂方法返回一个新的"范围对象" functio ...
- C# delegate event func action 匿名方法 lambda表达式
delegate event action func 匿名方法 lambda表达式 delegate类似c++的函数指针,但是是类型安全的,可以指向多个函数, public delegate void ...
随机推荐
- ORA-00376:file x cannot be read at this time
之前出现过机房断电情况,重启数据库后发现出现ORA-00376的错误. 通过查询数据文件状态: SQL> select file_id,online_status from dba_data_f ...
- R语言数据框行转列实例
目的:须要把数据框的行列进行转置 方法: # 原始数据框 > hrl_jd_mon 年份 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月 1 2010年 51 ...
- 位运算之 C 与或非异或
与运算:& 两者都为1为1,否则为0 1&1=1, 1&0=0, 0&1=0, 0&0=0 或运算:| 两者都为0为0,否则为1 1|1 = 1, ...
- Kendo UI开发教程(14): Kendo MVVM 数据绑定(三) Click
Click绑定可以把由ViewModel定义的方法不绑定到目标DOM的click事件.当点击目标DOM元素时触发ViewModel的对应方法.例如: 使用Click绑定 1 <div id=&q ...
- Android中<meta-data>的使用
在AndroidManifest.xml中.<meta-data>元素能够作为子元素,被包括在<activity>.<application> .<servi ...
- uva 10003 Cutting Sticks(区间DP)
题目连接:10003 - Cutting Sticks 题目大意:给出一个长l的木棍, 再给出n个要求切割的点,每次切割的代价是当前木棍的长度, 现在要求输出最小代价. 解题思路:区间DP, 每次查找 ...
- AngularJS是为了克服HTML在构建应用上的不足而设计的
AngularJS中文网:http://www.apjs.net/ 简介 AngularJS是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态文本展示设计的声明式语言,但要构 ...
- MapReduce 异常 LongWritable cannot be cast to Text
有一个txt文件,内容格公式是这样的: 深圳订做T恤 5729944 深圳厂家t恤批发 5729945 深圳定做文化衫 5729944 文化衫厂家 5729944 订做文化衫 5729944 深圳t恤 ...
- CI控制器调用内部方法并加载对应模板的做法
当我打开链接:http://localhost/3g/index/open/a/b? from=timeline后,推断链接中的from是否等于timeline,假设等于timeline.那么就调用控 ...
- shufe前辈名师
前辈名师 姓名 现职/原职 郭秉文 中国现代大学之父.国立东南大学校长.哥伦比亚大学教育学博士,该校第一任校长.为了纪念郭秉文先生,勉励优秀学子,郭夏瑜女士在上海财经大学等校设立了“郭秉文奖学金” 马 ...