Alle Func-Delegaten geben einen Wert zurück. Welche .NET-Delegaten können mit Methoden verwendet werden, die void zurückgeben?
561
Alle Func-Delegierten geben etwas zurück. Alle Aktionsdelegierten kehren ungültig zurück.
Func<TResult>
nimmt keine Argumente und gibt TResult zurück:
public delegate TResult Func<TResult>()
Action<T>
nimmt ein Argument und gibt keinen Wert zurück:
public delegate void Action<T>(T obj)
Action
ist der einfachste, "nackte" Delegierte:
public delegate void Action()
Es gibt auch Func<TArg1, TResult>
und Action<TArg1, TArg2>
(und andere bis zu 16 Argumente). Alle diese (außer Action<T>
) sind neu in .NET 3.5 (definiert in System.Core).
Func<,,, ... ,>
in .NET 4.0 bis zu 16 Parameter (plus einen Rückgabetyp im Fall von ) erreicht, aber die letzten acht Typen jeder "Serie" sind in definiertSystem.Core.dll
, nicht inmscorlib.dll
, also wäre dies der Grund warum michielvoo sie nicht gesehen hat. In den .NET-Versionen 4.5 und 4.5.1 wurden jedoch keine Funktionen oder Aktionen mehr hinzugefügt. Wird diese Sequenz zu A170836 oder A170875 ? Bleib dran.Ich glaube, das
Action
ist eine Lösung.quelle
Das ist nicht wahr. Sie alle verwenden mindestens ein Typargument, aber dieses Argument bestimmt den Rückgabetyp.
So
Func<T>
übernimmt keine Parameter und gibt einen Wert. Verwenden SieAction
oder,Action<T>
wenn Sie keinen Wert zurückgeben möchten.quelle
Versuchen Sie
System.Func<T>
undSystem.Action
quelle
Converter<TInput, TOutput>
der dem späteren ähnelteFunc<T, TResult>
. Es wurde in derList<>.ConvertAll
Methode verwendet, die jedes Element in einemList<>
auf ein anderes Objekt projizierte und alle "Funktionswerte" in ein neues platzierteList<>
. (Später benutzte man oft LinqSelect
dafür.)Gelegentlich möchten Sie einen Delegaten für die Ereignisbehandlung schreiben. In diesem Fall können Sie den Vorteil nutzen, der zusätzlich zu dem zweiten Parameter, von
System.EvenHandler<T>
dem abgeleitet werden soll, implizit ein Argument vom Typ akzeptiert . EventHandlers kehren zurückobject
EventArgs
void
Ich persönlich fand dies beim Testen nützlich, um einen einmaligen Rückruf in einem Funktionskörper zu erstellen.
quelle
Wenn Sie für schreiben
System.Windows.Forms
, können Sie auch Folgendes verwenden:quelle
Eine sehr einfache Möglichkeit, Subroutinen für Rückgabewerte und Nichtrückgabewerte aufzurufen. verwendet Func bzw. Action . (Siehe auch https://msdn.microsoft.com/en-us/library/018hxwa8(v=vs.110).aspx )
Versuchen Sie dies in diesem Beispiel
quelle