C#如何用delegate实现Javascript的each方法
2016-01-09 08:06
746 查看
C#中有很多易混淆的关键词,例如delegate,Func, Action和 Predicate。Func, Action和 Predicate本质上都是delegate,下面看一下delegate概念。
那么在C#中如何通过delegate来定义一个数组each方法呢,可以通过传入方法来实现灵活的逻辑处理,静态ListEx类下有一个静态的Each方法,定义如下:
那么我们可以定义一个字符串数组,并定义一个delegate作为函数参数进行传入,调用ListEx.Each方法:
当然可以用表达式进行简化:
我们也可以定义一个Where方法来过滤数组:
调用如下:
Action为返回值为void的代理;
Predicate为返回值为bool的代理;
1 delegate概念
delegate本质上就是一个指向函数的指针,可以指向不同的函数,只要函数的签名和代理一致即可。2 delegate应用
其实Func, Action, Predicate等都是delegate,只是特殊的delegate而已。delegate的巧妙应用,可以大大简化代码和提高灵活性。下面有一段Javascript代码,JS中经常使用数组的each方法来遍历数组并对其进行处理,如下所示:var arr = [ "one", "two", "three", "four"]; $.each(arr, function(){ alert(this); }); //上面这个each输出的结果分别为:one,two,three,four
那么在C#中如何通过delegate来定义一个数组each方法呢,可以通过传入方法来实现灵活的逻辑处理,静态ListEx类下有一个静态的Each方法,定义如下:
public static T[] Each<T>(T[] source, Func<T, T> function) { T[] ret =new T[source.Length]; int i = 0; foreach (T item in source) { ret[i]=function(item); i++; } return ret; }
那么我们可以定义一个字符串数组,并定义一个delegate作为函数参数进行传入,调用ListEx.Each方法:
var arr =new string[]{ "one", "two", "three", "four"}; var newArr= ListEx.Each<string>(arr,delegate(string x){ x=x+"_do"; return x; });
当然可以用表达式进行简化:
var newArr2 = ListEx.Each<string>(newArr, (string x) => x = x + "_do");
我们也可以定义一个Where方法来过滤数组:
public static IList<T> Find<T>(IList<T> source, Predicate<T> predicate) { List<T> ret = new List<T>(); foreach (T item in source) { if (predicate(item)) { ret.Add(item); } } return ret; } public static T[] Where<T>(T[] source, Predicate<T> predicate) { IList<T> list=source.ToList<T>(); IList<T> retList= Find<T>(list, predicate); return retList.ToArray<T>(); }
调用如下:
var newArr3 = ListEx.Where<string>(arr, x => x == "two");
3 区别概述
Func是必须指定返回值的代理;Action为返回值为void的代理;
Predicate为返回值为bool的代理;
相关文章推荐
- JavaScript W3学习笔记
- 《JS DOM编程艺术》读书笔记
- js实现购物车效果
- X5 内核浏览器对json格式支持的一个小区别
- JavaScript电子时钟倒计时
- JS中生成随机数的用法及相关函数
- javascript类型系统 Array对象学习笔记
- javascript返回顶部的按钮实现方法
- javascript跑马灯抽奖实例讲解
- 实例讲解js验证表单项是否为空的方法
- js父页面中使用子页面的方法
- 详解javascript事件冒泡
- 实例讲解javascript注册事件处理函数
- 学习JSP标签库
- 简单生成JSON字符串和运用官方版本的JSON简单解析
- 简单生成JSON字符串和运用官方版本的JSON简单解析
- 官方JSON配合FastJSON一起运用的几种解析情况
- js代码优化注意事项
- 页面加载完前执行所有的js代码 解决方案
- D3.js-坐标轴生成测试SVG