Kann jemand eine gute Erklärung (hoffentlich mit Beispielen) für diese 3 wichtigsten Delegierten geben:
- Prädikat
- Aktion
- Func
Predicate
: im Wesentlichen Func<T, bool>
; stellt die Frage "Erfüllt das angegebene Argument die vom Delegierten dargestellte Bedingung?" Wird in Dingen wie List.FindAll verwendet.
Action
: Führen Sie eine Aktion mit den angegebenen Argumenten aus. Sehr allgemeiner Zweck. Wird in LINQ nicht viel verwendet, da es im Grunde genommen Nebenwirkungen impliziert.
Func
: Gebrauchte ausgiebig in der Regel in LINQ, das Argument, zum Beispiel durch Projektion eine komplexe Struktur auf eine Eigenschaft zu verwandeln.
Andere wichtige Delegierte:
EventHandler
/ EventHandler<T>
: Wird in allen WinForms verwendet
Comparison<T>
: Wie IComparer<T>
aber in Delegiertenform.
System.Converter<TInput, TOutput>
, obwohl es selten verwendet wird.EventHandler/EventHandler<T>
erscheinen auch außerhalb von WinForms.Action
,Func
UndPredicate
alle gehören in den Delegat Familie.Action
: Die Aktion kann n Eingabeparameter annehmen, gibt jedoch void zurück.Func
: Func kann n Eingabeparameter annehmen, gibt jedoch immer das Ergebnis des angegebenen Typs zurück.Func<T1,T2,T3,TResult>
, hier sind T1, T2, T3 Eingangsparameter und TResult ist der Ausgang davon.Predicate
: Prädikat ist auch eine Form von Func, gibt aber immer bool zurück. In einfachen Worten ist es Wrapper vonFunc<T,bool>
.quelle
Neben Jons Antwort gibt es auch
Converter<TInput, TOutput>
: Es ist im WesentlichenFunc<TInput, TOutput>
, aber mit Semantik. Wird von List.ConvertAll und Array.ConvertAll verwendet, hat es aber persönlich nirgendwo anders gesehen.quelle
MethodInvoker ist eine Methode, die WinForms-Entwickler verwenden können. Es akzeptiert keine Argumente und gibt keine Ergebnisse zurück. Es ist älter als Action und wird immer noch häufig beim Aufrufen des UI-Threads verwendet, da BeginInvoke () et al. Einen untypisierten Delegaten akzeptieren. obwohl Action genauso gut tun wird.
Ich würde auch ThreadStart und ParameterizedThreadStart kennen; Wieder werden die meisten Leute heutzutage eine Aktion ersetzen.
quelle
Prädikat, Funktion und Aktion sind integrierte Delegateninstanzen von .NET. Jede dieser Delegateninstanzen kann auf Benutzermethoden mit einer bestimmten Signatur verweisen oder auf diese verweisen.
Aktionsdelegierter - Instanzen von Aktionsdelegierten können auf Methoden verweisen, die Argumente annehmen und void zurückgeben.
Func-Delegat - Die Func-Delegatinstanz kann auf Methoden verweisen, die eine variable Anzahl von Argumenten annehmen und einen Typ zurückgeben.
Prädikat - Prädikate ähneln func-Delegatinstanzen und können auf Methoden verweisen, die eine variable Anzahl von Argumenten verwenden und einen Bool-Typ zurückgeben.
quelle
Action und Func mit Lambda:
quelle
Func ist LINQ-freundlicher und kann als Parameter übergeben werden. (punktfrei)
Prädikat kann nicht, muss erneut umbrochen werden.
quelle
Ein einfaches Beispiel über die Argumente und was jeden Typ retutn
Diese Funktion verwendet zwei int-Argumente und gibt ein int zurück. Func hat immer den Rückgabetyp
In diesem Fall hat func keine Argumente, sondern gibt eine Zeichenfolge zurück
Diese Aktion verwendet zwei int-Argumente und gibt void zurück
Dieses Prädikat nimmt ein Argument und gibt immer bool zurück. Im Allgemeinen geben Prädikate immer bool zurück.
quelle