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

首頁 > 編程 > C# > 正文

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

2020-01-24 01:19:23
字體:
來源:轉載
供稿:網友

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#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 墨竹工卡县| 禄丰县| 水城县| 嘉黎县| 栖霞市| 蕲春县| 平和县| 辽源市| 从江县| 万全县| 陇川县| 长治市| 新民市| 什邡市| 莱西市| 新乡市| 黄冈市| 双桥区| 曲阜市| 仁寿县| 丰城市| 通辽市| 云浮市| 北票市| 甘孜县| 金塔县| 五华县| 海盐县| 谷城县| 新密市| 新龙县| 都江堰市| 扶沟县| 日土县| 玉树县| 林芝县| 藁城市| 南平市| 雷州市| 康乐县| 逊克县|