//建立乙個整型陣列程式如我所願的找出了intarray中的奇數有哪些. 但背後func委託實質上為我們省去了哪些步驟呢? 我首先研究了linq查詢中的委託.int intarray = new int ;
//宣告func委託, 判斷是否是奇數
funcisodd = i => ((i & 1) == 1);
//執行查詢操作, 別忘了具有"延遲特性"
ienumerableitems = intarray.where(isodd);
//顯示結果
foreach (int item in items)
console.writeline(item);
在我的一篇介紹lambda表示式的部落格中有乙個例子. 例子描述了這樣一種情況: 有乙個int型陣列, 需要找出其中的奇數, 偶數等等等. 下面再貼出這個例子有用部分的完整**:
using system;這個例子自己定義的乙個commom類, 並有乙個篩選出一定要求的方法filterarrayofints, 如果我們使用擴充套件方法將filterarrayofints擴充套件到int型別, 將filterarrayofints方法名改成where, 那就很有趣了, 那麼最後篩選出奇數的**就是這個樣子的:using system.collections;
namespace linqtest
}//根據需要, 自己定義篩選方法
public class myintfilter
//自己定義的篩選方法2: 檢測是否是偶數
public static bool iseven(int i)
//...根據需要還可以定義其它篩選方法
}static void main(string args)
;//篩選出奇數
int oddnums = commom.filterarrayofints(nums, i => ((i & 1) == 1));
foreach (int i in oddnums)
console.write(i + " ");}}
}
int nums = ;是不是非常像linq中的where? 其實就是這麼個道理.//篩選出奇數
int oddnums = nums.where(i => ((i & 1) == 1));
什麼意思呢? 上面的**還是有用的, 可以這樣理解, 上面**中myintfilter類中定義了很多篩選一定條件整數的方法, 有方法就會有方法返回型別, 方法如果有引數就會還有引數型別. 如下:
//自己定義的篩選方法1: 檢測是否是奇數func委託將定義這些方法的**變得簡單, 如果是上面的這兩個方法, 利用func委託只需要這樣寫:public static bool isodd(int i)
//自己定義的篩選方法2: 檢測是否是偶數
public static bool iseven(int i)
funcisodd = i => ((i & 1) == 1);這樣子在寫法上就比較簡單, 並且一看就明了**是什麼意思.funciseven = i => ((i & 1) != 1);
C 中的Func委託和Action委託
委託時物件導向的程式語言中新加入的一種特性,在c 中引入委託使得c 程式的編寫更加靈活。c 中可以自己定義各種各樣的委託,但是c 語言也預先為我們定義了兩個做常用的委託,乙個是func乙個是action.函式最基本的特點就是輸入輸出,即輸入引數 執行運算 輸出引數,action是一類沒有輸出引數的委...
c 中Action和Func委託
泛型acion委託表示引用乙個void返回型別的方法,至多可以傳遞至16個引數型別,沒有泛型的action類可呼叫沒有引數的方法,如 class test static void main string args 泛型func委託表示引用帶返回型別的方法,至多可以傳遞16個引數型別和乙個返回型別,f...
Func泛型委託
描述 封裝乙個具有乙個引數並返回tresult引數指定的型別值的方法.語法 public delegate tresult func t arg 引數型別 t 此委託封裝的方法的引數型別.tresult 此委託封裝的方法的返回值型別.引數 arg 委託封裝的方法的引數 返回值 此委託封裝的方法的返回...