簡體   English   中英

C# - 委托謂詞<T>

[英]C# - delegate Predicate<T>

委托Predicate<T>的用途是什么,我應該像嵌套樣式那樣處理它

Func<Predicate<T>> 簡單的例子請。

有幾種用例允許調用者提供返回truefalse的函數。 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”開頭的字符串。 Predicates.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM