Tous les délégués Func renvoient une valeur. Quels sont les délégués .NET qui peuvent être utilisés avec des méthodes qui renvoient void?
561
Tous les délégués Func retournent quelque chose; tous les délégués à l'action reviennent nuls.
Func<TResult>
ne prend aucun argument et retourne TResult:
public delegate TResult Func<TResult>()
Action<T>
prend un argument et ne renvoie pas de valeur:
public delegate void Action<T>(T obj)
Action
est le délégué le plus simple et «nu»:
public delegate void Action()
Il y a aussi Func<TArg1, TResult>
et Action<TArg1, TArg2>
(et d'autres jusqu'à 16 arguments). Tous ces éléments (à l'exception de Action<T>
) sont nouveaux pour .NET 3.5 (définis dans System.Core).
Func<,,, ... ,>
) dans .NET 4.0, mais les huit derniers types de chaque "série" sont définis dansSystem.Core.dll
, pas dansmscorlib.dll
, donc ce serait la raison pourquoi michielvoo ne les a pas vus. Cependant, plus de Funcs ou d'actions n'ont été ajoutés dans les versions .NET 4.5 et 4.5.1. Cette séquence deviendra-t-elle A170836 ou A170875 ? Restez à l'écoute.Je crois que
Action
c'est une solution à cela.la source
Ce n'est pas vrai. Ils prennent tous au moins un argument de type, mais cet argument détermine le type de retour.
Func<T>
N'accepte donc aucun paramètre et renvoie une valeur. UtilisezAction
ouAction<T>
lorsque vous ne souhaitez pas renvoyer de valeur.la source
Essayez
System.Func<T>
etSystem.Action
la source
Converter<TInput, TOutput>
qui était comme le dernierFunc<T, TResult>
. Il a été utilisé dans laList<>.ConvertAll
méthode qui projetait chaque élément d'un dans unList<>
autre objet et plaçait toutes les "valeurs de fonction" dans un nouveauList<>
. (Plus tard, on utilise souvent LinqSelect
pour cela.)Parfois, vous souhaiterez écrire un délégué pour la gestion des événements, auquel cas vous pouvez profiter de
System.EvenHandler<T>
ce qui accepte implicitement un argument de typeobject
en plus du deuxième paramètre qui doit dériverEventArgs
. EventHandlers reviendravoid
Personnellement, j'ai trouvé cela utile lors des tests de création d'un rappel unique dans un corps de fonction.
la source
Si vous écrivez pour
System.Windows.Forms
, vous pouvez également utiliser:la source
Un moyen très simple d'appeler des sous-programmes de valeur de retour et de non-retour. utilise respectivement Func et Action . (voir également https://msdn.microsoft.com/en-us/library/018hxwa8(v=vs.110).aspx )
Essayez cet exemple
la source