国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#利用delegate實現Javascript的each方法

2019-10-29 21:33:54
字體:
來源:轉載
供稿:網友
這篇文章主要為大家介紹了介紹了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方法來遍歷數組并對其進行處理,如下所示:

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的代理;

以上就是本文的詳細內容,希望對大家的學習C#程序設計有所幫助。



注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上思县| 同江市| 金湖县| 龙川县| 吕梁市| 蒲江县| 潜山县| 蒙城县| 宁明县| 普格县| 雷州市| 涞水县| 万盛区| 凌云县| 安塞县| 行唐县| 苏尼特右旗| 黄梅县| 砚山县| 临猗县| 泗洪县| 富宁县| 青州市| 新泰市| 德州市| 搜索| 娱乐| 黑水县| 石首市| 搜索| 阜阳市| 遂宁市| 安吉县| 弥勒县| 和政县| 沿河| 博乐市| 五峰| 金堂县| 衡山县| 莱芜市|