Was ist Func, wie und wann wird es benutzt?
Was ist Func<>
und für was wird es verwendet?
InformationsquelleAutor der Frage learning | 2010-09-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ist Func<>
und für was wird es verwendet?
InformationsquelleAutor der Frage learning | 2010-09-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Func<T>
ist ein vordefinierten Delegaten-Typ für die eine Methode gibt einen Wert des TypsT
.In anderen Worten, Sie können verwenden Sie diesen Typ zum Verweis auf eine Methode, die zurückgibt einen Wert von
T
. E. g.kann darauf verwiesen werden, wie dies
InformationsquelleAutor der Antwort Brian Rasmussen
Denken, es als ein Platzhalter. Es kann sehr nützlich sein, wenn Sie code haben, der folgt einem bestimmten Muster sein, müssen aber nicht an ein bestimmtes gebunden Funktionalität.
Betrachten Sie zum Beispiel die
Enumerable.Select
- Erweiterung-Methode.Diese Methode nimmt eine
Func<T, TResult>
statt einer konkreten Funktion. Dies ermöglicht den Einsatz in alle Kontext, in dem die oben genannten Muster gilt.So zum Beispiel, sagen, dass ich eine
List<Person>
- und ich will nur den Namen jeder person in der Liste. Ich kann dies tun:Oder sagen, ich will die Alter von jeder person:
Sofort können Sie sehen, wie ich war in der Lage zu nutzen, die gleichen code repräsentiert eine Muster (mit
Select
) mit zwei verschiedenen Funktionen (p => p.Name
undp => p.Age
).Die alternative wäre, zu schreiben, eine andere version der
Select
jedes mal, wenn Sie wollte-scan-Sequenz für eine andere Art von Wert. So erzielen Sie den gleichen Effekt wie oben, würde ich brauchen:Mit einem Delegierten fungieren als Platzhalter, ich frei mich aus zu schreiben, das gleiche Muster immer und immer wieder in Fällen wie diesem.
InformationsquelleAutor der Antwort Dan Tao
Func<T1, T2, ..., Tn, Tr>
repräsentiert eine Funktion, die (T1, T2, ..., Tn) Argumente und gibt Tr.Zum Beispiel, wenn Sie eine Funktion:
Speichern Sie es als eine Art einer Funktion-variable:
Verwenden und dann genau so, wie Sie verwenden würden, sqr:
etc.
Denken Sie jedoch daran, dass es eine Stellvertretung, für fortgeschrittene info finden Sie in der Dokumentation.
InformationsquelleAutor der Antwort Grozz
Func<T1,R>
und die andere vordefinierte generischeFunc
Delegierten (Func<T1,T2,R>
Func<T1,T2,T3,R>
und andere) sind generische Delegaten, die Rückkehr der Typ des letzten generische parameter.Wenn Sie eine Funktion, die zurückkehren muss verschiedene Arten, je nach den Parametern, die Sie verwenden können, eine
Func
Stellvertretung, unter Angabe der Rückgabe-Typ.InformationsquelleAutor der Antwort Oded
Ist es nur eine vordefinierte generische Delegat. Sie brauchen nicht zu erklären, jeder delegieren. Es gibt einen anderen vordefinierten Delegaten
Action<T, T2...>
das ist das gleiche, aber die void zurückgibt.InformationsquelleAutor der Antwort Stefan Steinegger
Finde ich
Func<T>
sehr nützlich, wenn ich eine Komponente erstellen, werden muss personalisierte "on the fly".Nehmen dieses sehr einfache Beispiel: ein
PrintListToConsole<T>
Komponente.Ein sehr einfaches Objekt, druckt diese Liste der Objekte auf der Konsole aus.
Sie wollen, lassen die Entwickler, die es verwendet, Personalisierung der Ausgabe.
Zum Beispiel, Sie wollen, lassen Sie ihn definieren, eine bestimmte Art von Anzahl, format und so weiter.
Ohne Func
Zuerst müssen Sie eine Schnittstelle für eine Klasse, dauert die Eingabe und erzeugt die Zeichenfolge an die Konsole ausgegeben.
Dann müssen Sie zum erstellen der Klasse
PrintListToConsole<T>
werden, das die zuvor erstellte interface und verwendet es wird auf jedes element der Liste.Der Entwickler, muss Sie Ihre Komponente hat:
implementieren Sie die Schnittstelle
passieren die echt Klasse, die
PrintListToConsole
Mit Func-es ist viel einfacher
Innerhalb der Komponente, die Sie definieren einen parameter vom Typ
Func<T,String>
dass repräsentiert die Schnittstelle einer Funktiondie einen input-parameter vom Typ T und einen string zurückgibt (den output für die Konsole)Wenn der Entwickler das die Komponente verwendet er einfach übergibt die Komponente die Umsetzung der
Func<T, String>
geben, das ist eine Funktion, die erstellt die Ausgabe für die Konsole.Func<T>
können, definieren Sie eine generische Methode, Schnittstelle on-the-fly.Sie definieren, welche Art der Eingabe ist und welche der Ausgang ist.
Einfach und prägnant sein.
InformationsquelleAutor der Antwort Marco Staffoli