[英]C# - delegate Predicate<T>
委托Predicate<T>
的用途是什么,我應該像嵌套樣式那樣處理它
Func<Predicate<T>>
? 簡單的例子請。
有幾種用例允許調用者提供返回true
或false
的函數。 Predicate<T>
類型是一種方法。 這與Func<T, bool>
沒有什么不同(除了Predicate<T>
在早期版本的C#中可用)。
一個簡單的(和人為的例子):
string[] strings = new string[] { "hello", "goodbye", "how are you" };
Array.FindAll(strings, delegate(string s)
{
return s.StartsWith("h");
});
或者,lambda風格:
Array.FindAll(strings, s => s.StartsWith("h"));
FindAll
方法返回與條件匹配的所有項的數組。 在這種情況下,所有以“h”開頭的字符串。 Predicate
是s.StartsWith("h")
。
這里有用的是, Array
類知道如何搜索其所有元素,並創建一個只包含匹配元素的新數組。 算法的這一部分對於許多代碼是通用的。 不常見的部分是匹配標准,它將根據特定代碼段的要求而變化。 因此調用者指定邏輯的一部分,並將其作為Predicate
傳遞。
您可以以“嵌套”樣式處理它。 Func<Predicate<T>>
表示您正在聲明一個返回Predicate<T>
的函數。 你確定這是你想要的嗎? 你想要實現什么目標?
// Make a list of integers.
List<int> list = new List<int>();
list.AddRange(new int[] { 20, 1, 4, 8, 9, 44 });
// Call FindAll() using traditional delegate syntax.
Predicate<int> callback = new Predicate<int>(IsEvenNumber);
List<int> evenNumbers = list.FindAll(callback);
// Target for the Predicate<> delegate.
static bool IsEvenNumber(int i)
{
// Is it an even number?
return (i % 2) == 0;
}
這定義了一個返回謂詞的函數(一個返回true或false的函數)。 你怎么用這個? 您可以通過將其委托給另一個函數來刪除返回給您的謂詞的責任,該函數的作業不是返回True或False而是允許您在需要時延遲執行謂詞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.