Todos los delegados de Func devuelven un valor. ¿Cuáles son los delegados .NET que se pueden usar con métodos que devuelven vacío?
561
Todos los delegados de Func devuelven algo; Todos los delegados de acción vuelven sin efecto.
Func<TResult>
no toma argumentos y devuelve TResult:
public delegate TResult Func<TResult>()
Action<T>
toma un argumento y no devuelve un valor:
public delegate void Action<T>(T obj)
Action
es el delegado 'simple' más simple:
public delegate void Action()
También hay Func<TArg1, TResult>
y Action<TArg1, TArg2>
(y otros hasta 16 argumentos). Todos estos (excepto Action<T>
) son nuevos en .NET 3.5 (definido en System.Core).
Func<,,, ... ,>
) en .NET 4.0, pero los últimos ocho tipos de cada "serie" se definen enSystem.Core.dll
, no enmscorlib.dll
, así que esa sería la razón por qué michielvoo no los vio. Sin embargo, no se agregaron más Funcs o Actions en .NET versiones 4.5 y 4.5.1. ¿Esta secuencia se convertirá en A170836 o A170875 ? Manténganse al tanto.Creo que
Action
es una solución a esto.fuente
Eso no es cierto. Todos toman al menos un argumento de tipo, pero ese argumento determina el tipo de retorno.
Entonces
Func<T>
no acepta parámetros y devuelve un valor. UseAction
oAction<T>
cuando no desee devolver un valor.fuente
Intenta
System.Func<T>
ySystem.Action
fuente
Converter<TInput, TOutput>
que era como el posteriorFunc<T, TResult>
. Se usó en elList<>.ConvertAll
método que proyectaba cada elemento en unList<>
sobre otro objeto, y colocaba todos los "valores de función" en un nuevoList<>
. (Más tarde, a menudo se usaría LinqSelect
para eso.)Ocasionalmente, querrá escribir un delegado para el manejo de eventos, en cuyo caso puede aprovechar
System.EvenHandler<T>
que acepta implícitamente un argumento de tipoobject
además del segundo parámetro del que debe derivarseEventArgs
. EventHandlers volverávoid
Personalmente, esto me pareció útil durante las pruebas para crear una devolución de llamada única en un cuerpo de función.
fuente
Si está escribiendo para
System.Windows.Forms
, también puede usar:fuente
Una forma muy fácil de invocar subrutinas de valor de retorno y no retorno. está utilizando Func y Action respectivamente. (ver también https://msdn.microsoft.com/en-us/library/018hxwa8(v=vs.110).aspx )
Prueba este ejemplo
fuente