Kannst du mir erklären:
- Was ist ein Prädikatdelegierter?
- Wo sollen wir Prädikate verwenden?
- Gibt es Best Practices bei der Verwendung von Prädikaten?
Beschreibender Quellcode wird geschätzt.
Ein Prädikat ist eine Funktion, die true
oder zurückgibt false
. Ein Prädikatdelegat ist eine Referenz auf ein Prädikat.
Ein Prädikatdelegat ist also im Grunde eine Referenz auf eine Funktion, die true
oder zurückgibt false
. Prädikate sind sehr nützlich, um eine Liste von Werten zu filtern - hier ein Beispiel.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> list = new List<int> { 1, 2, 3 };
Predicate<int> predicate = new Predicate<int>(greaterThanTwo);
List<int> newList = list.FindAll(predicate);
}
static bool greaterThanTwo(int arg)
{
return arg > 2;
}
}
Wenn Sie jetzt C # 3 verwenden, können Sie ein Lambda verwenden, um das Prädikat sauberer darzustellen:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> list = new List<int> { 1, 2, 3 };
List<int> newList = list.FindAll(i => i > 2);
}
}
yeild return
stattdessen sein? Oder wie funktioniert das, wie iteriert es über die gesamte Liste?greaterThanTwo
ist auchreturn
nichtyield return
derFindAll
Fall, da es die Methode ist, die die Sequenz für Sie verwaltet.i > val
, statti > 2
wo derval
vom Benutzer eingegebene Wert zu haben .Ausgehend von Andrews Antwort in Bezug auf c # 2 und c # 3 ... können Sie sie auch inline für eine einmalige Suchfunktion ausführen (siehe unten).
Hoffe das hilft.
quelle
Nur ein Delegat, der einen Booleschen Wert zurückgibt. Es wird häufig zum Filtern von Listen verwendet, kann aber überall verwendet werden.
quelle
Es gibt einen guten Artikel über Prädikate hier , obwohl es von der .NET2 Ära ist, so gibt es keine Erwähnung von Lambda - Ausdrücke in dort.
quelle
Was ist Prädikatdelegierter?
1) Prädikat ist eine Funktion, die true oder false zurückgibt. Dieses Konzept wurde in das .net 2.0-Framework integriert. 2) Es wird mit dem Lambda-Ausdruck (=>) verwendet. Es wird ein generischer Typ als Argument verwendet. 3) Damit kann eine Prädikatfunktion definiert und als Parameter an eine andere Funktion übergeben werden. 4) Es ist ein Sonderfall von a
Func
, da nur ein einziger Parameter verwendet wird und immer ein Bool zurückgegeben wird.Im C # -Namensraum:
Es ist im System-Namespace definiert.
Wo sollen wir Predicate Delegate verwenden?
Wir sollten Predicate Delegate in den folgenden Fällen verwenden:
1) Zum Suchen von Elementen in einer generischen Sammlung. z.B
2) Grundlegendes Beispiel, das den Code verkürzt und true oder false zurückgibt:
Rufen Sie jetzt das obige Prädikat auf:
3) Eine anonyme Methode kann auch einem Prädikat-Delegatentyp wie folgt zugewiesen werden:
Best Practices für Prädikate?
Verwenden Sie Func, Lambda-Ausdrücke und Delegaten anstelle von Prädikaten.
quelle
Mit den auf Prädikaten basierenden Suchmethoden kann ein Methodendelegierter oder ein Lambda-Ausdruck entscheiden, ob ein bestimmtes Element eine „Übereinstimmung“ ist. Ein Prädikat ist einfach ein Delegat, der ein Objekt akzeptiert und true oder false zurückgibt: public delegate bool Predicate (T-Objekt);
quelle
Wenn Sie sich in VB 9 (VS2008) befinden, kann ein Prädikat eine komplexe Funktion sein:
Oder Sie können Ihr Prädikat als Lambda schreiben, solange es nur ein Ausdruck ist:
quelle
Das Prädikat fällt in C # unter die Kategorie der generischen Delegaten. Dies wird mit einem Argument aufgerufen und gibt immer einen booleschen Typ zurück. Grundsätzlich wird das Prädikat verwendet, um die Bedingung zu testen - wahr / falsch. Viele Klassen unterstützen Prädikate als Argument. Zum Beispiel erwartet list.findall das Parameterprädikat. Hier ist ein Beispiel für das Prädikat.
Stellen Sie sich einen Funktionszeiger mit der Signatur vor -
bool delegate myDelegate (T-Übereinstimmung);
Hier ist das Beispiel
Node.cs
Hauptklasse -
quelle
Einfach -> sie liefern True / False-Werte basierend auf der Bedingung, die hauptsächlich für die Abfrage verwendet wird. Meistens mit Delegierten verwendet
Betrachten Sie ein Beispiel für eine Liste
enthält Namen und Alter. Sagen wir jetzt, wir wollen Namen unter der Bedingung finden, dass ich sie benutze.
versuchte es einfach zu halten!
quelle
Ein Delegat definiert einen Referenztyp, mit dem eine Methode mit einer bestimmten Signatur gekapselt werden kann. C # -Delegierter Lebenszyklus: Der Lebenszyklus des C # -Delegierten ist
Weitere Informationen finden Sie unter http://asp-net-by-parijat.blogspot.in/2015/08/what-is-delegates-in-c-how-to-declare.html
quelle