標籤:style color io os 使用 ar sp div on
Predicate<T> 是一個委託,它代表了一個方法,它的定義是:
namespace System { // 摘要: 表示定義一組條件並確定指定對象是否符合這些條件的方法。 // 參數: // obj: 要按照由此委託表示的方法中定義的條件進行比較的對象。 // 型別參數: // T: 要比較的對象的類型。 // 返回結果: // 如果 obj 符合由此委託表示的方法中定義的條件,則為 true;否則為 false。 public delegate bool Predicate<T>(T obj); }
這個委託常被好多Array , List<T> 類的方法所使用,用來尋找集合中的元素。
簡單地說,Predicate就是一個代表了接受一個T類型的參數,然後檢查它是否滿足某一規則然後返回 true 或者 false 的委託。樣本如下:
在這個例子中,我們使用Predicate 來告訴集合如何篩選,然後集合會處理整個重複篩選的過程。
比如說,我們有一個 SprintBacklogItem 集合,想根據State==Closed 這一規則來進行篩選。我們就可以使用如下的一個方法:
private bool HasStateClosed(SprintBacklogItem item)
{
if (item.State == SprintBackLogStatesStrings.CLOSED)
return true;
return false;
}
這個方法簡單地檢查了是否SprintBacklogItem‘s state is closed,然後返回true/false。現在如果我們觀察一下這個方法的定義,
就能夠確認可以使用Predicate 委託來代表這個方法。下面這行代碼就用 FindAll( ) 方法篩選出了所以關閉了的SprintBacklogItems
List<SprintBacklogItem> closedItems= _SprintBackLogsItems.FindAll(HasStateClosed);
Func():封裝一個不具有參數但卻返回 TResult 參數指定的類型值的方法。
Func(T1, T2, TResult):封裝一個具有兩個參數並返回 TResult 參數指定的類型值的方法,沒有T2就是封裝一個具有參數並....。
Action() Action(T1) Action(T2) : 封裝一個方法,該方法指定數量的參數(如()無參數,(T1)一個參數,以此類推)並且不傳回值。這個和Func有相似處,但無傳回值而已。
定義:
delegate void Action<T>(T obj);
C#的泛型委派Predicate/Func/Action