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
Actiones 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. UseActionoAction<T>cuando no desee devolver un valor.fuente
Intenta
System.Func<T>ySystem.Actionfuente
Converter<TInput, TOutput>que era como el posteriorFunc<T, TResult>. Se usó en elList<>.ConvertAllmé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 LinqSelectpara 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 tipoobjectademás del segundo parámetro del que debe derivarseEventArgs. EventHandlers volverávoidPersonalmente, 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