程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Func<T>,Action<T>,Predicate<T>使用小結,funcpredicate

Func<T>,Action<T>,Predicate<T>使用小結,funcpredicate

編輯:C#入門知識

Func<T>,Action<T>,Predicate<T>使用小結,funcpredicate



一、基本知識
1.這三個都是.Net內置的泛型委托,方便我們直接使用,而不需要在使用委托時還要做如下定義

public delegate string GetName(string bookId);

 

2.Func<T>是有返回值的泛型委托,格式為Func<T1,T2,T..N,TResult>,T1,T2,T..N為多個參數,TResult為返回值

3.Ation<T>是沒有返回值的泛型委托,格式為Action<T1,T2,T..N>,T1,T2,T..N為多個參數

4.Predicate<T>是返回值為Bool的泛型委托,相當於Func<T,bool>,主要用於校驗,檢查等

二、使用理解
泛型委托的使用,和抽像類的抽象方法有異曲同工之妙,即將業務變化的實現部分抽離到外部,內部程序主體框架保持不變,做到方法注入,屬性注入
配合匿名方法的使用,可進一步使外部的實現部分也變得非常簡潔,在Linq的擴展方法有大量使用

例如:有一個判斷單號合法的方法(除了判斷,還要寫LOG,計數等),因為每種單據不同,判斷邏輯也是不一樣的,演示方法注入

//方法定義
public static bool CheckOrderNo(Func<string, bool> fun, string orderNo)
{
    bool re = fun(orderNo);
    //TODO:Log
    //TODO:Count
    return re;
}

//使用匿名方法
//判斷是否為AA單(長度為10,首字母為"AA"
var result= CheckOrderNo(x => x.Length == 10 && x.Substring(0, 2).ToUpper().Equals("AA"), "AB126552DFD15");

//判斷是否為AD單(長度為16,6~10字母為"ADGH")
var result= CheckOrderNo(x => x.Length == 16 && x.Substring(5, 4).ToUpper().Equals("ADGH"), "AB126ADGH552DFD");


//使用普通做法
public bool CheckAAOrderNo(string orderNo)
{
    return orderNo.Length == 10 && orderNo.Substring(0, 2).ToUpper().Equals("AA")
}
var result= CheckOrderNo(CheckAAOrderNo, "AB126552DFD15");

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved