Ich habe mich gefragt, ob jemand anhand Func<int, string>
einiger klarer Beispiele erklären könnte, was ist und wie es verwendet wird.
Kennen Sie die Delegierten im Allgemeinen? Ich habe eine Seite über Delegierte und Veranstaltungen, die helfen können, wenn nicht, obwohl sie eher darauf ausgerichtet ist, die Unterschiede zwischen den beiden zu erklären.
Func<T, TResult>
ist nur ein generischer Delegat - ermitteln Sie, was dies in einer bestimmten Situation bedeutet, indem Sie die Typparameter ( T
und TResult
) durch die entsprechenden Typpargumente ( int
und string
) in der Deklaration ersetzen . Ich habe es auch umbenannt, um Verwirrung zu vermeiden:
string ExpandedFunc(int x)
Mit anderen Worten, Func<int, string>
ist ein Delegat, der eine Funktion darstellt, die ein int
Argument aufnimmt und a zurückgibt string
.
Func<T, TResult>
wird in LINQ häufig sowohl für Projektionen als auch für Prädikate verwendet (im letzteren Fall TResult
immer bool
). Sie können beispielsweise a verwenden, Func<int, string>
um eine Folge von Ganzzahlen in eine Folge von Zeichenfolgen zu projizieren. Lambda-Ausdrücke werden normalerweise in LINQ verwendet, um die relevanten Delegaten zu erstellen:
Func<int, string> projection = x => "Value=" + x;
int[] values = { 3, 7, 10 };
var strings = values.Select(projection);
foreach (string s in strings)
{
Console.WriteLine(s);
}
Ergebnis:
Value=3
Value=7
Value=10
A
Func<int, string>
isst Ints und gibt Strings zurück. Also, was isst Ints und gibt Strings zurück? Wie wäre es damit ...Dort habe ich gerade eine Funktion erfunden, die Ints isst und Strings zurückgibt. Wie würde ich es benutzen?
Nicht sehr sexy, ich weiß, aber das ist die einfache Idee, auf der viele Tricks basieren. Verwenden wir stattdessen einen Func.
Anstatt IntAsString für jedes Mitglied aufzurufen, habe ich einen Verweis darauf namens fnc erstellt (diese Verweise auf Methoden werden als Delegaten bezeichnet ) und diesen stattdessen verwendet. (Denken Sie daran, dass fnc Ints isst und Strings zurückgibt).
Dieses Beispiel ist nicht sehr sexy, aber eine Menge der cleveren Dinge, die Sie sehen werden, basieren auf der einfachen Idee von Funktionen, Delegaten und Erweiterungsmethoden .
Eine der besten Grundierungen für dieses Zeug, das ich gesehen habe, ist hier . Er hat viel mehr echte Beispiele. :) :)
quelle
Es ist ein Delegat, der einen
int
als Parameter verwendet und einen Wert vom Typ zurückgibtstring
.Hier ist ein Beispiel für seine Verwendung:
quelle
Func<int, string>
Akzeptiert einen int-Wert-Parameter und gibt einen Zeichenfolgenwert zurück. Hier ist ein Beispiel, bei dem eine zusätzliche unterstützende Methode nicht erforderlich ist.HINWEIS: Der letzte Objekttyp in Func (in diesem Beispiel "Zeichenfolge") ist der Rückgabetyp für Funktionen (dh nicht auf Grundelemente, sondern auf ein beliebiges Objekt beschränkt). Daher
Func<int, bool, float>
akzeptiert Parameter int und bool Wert und gibt einen Float - Wert.HTH
quelle