c# - una - Void Func sin argumentos
uso del parametro out sin asignar c# (3)
Lo que estás buscando es una Acción. No requiere parámetros, y no devuelve ningún valor.
Hay algunas preguntas similares pero no exactamente como la mía.
¿Hay un Func equivalente para una función sin un valor de retorno (es decir, vacío) y sin parámetros?
La pregunta relacionada es que Func no devuelve nada. pero esto no responde por un tipo de vacío.
(Lo necesito para solicitar acciones de mi modelo de vista a mi vista).
Sí, hay diferentes sobrecargas de Action
toman una cantidad diferente de parámetros de entrada y tienen un tipo de retorno void
.
Action public delegate void Action()
Action<T> public delegate void Action<T>(T obj)
Action<T1,T2> public delegate void Action<T1,T2>(T1 arg1, T2 arg2)
Action<T1,T2,T3> public delegate void Action<T1,T2,T3>(T1 arg1, T2 arg2, T3 arg3)
...
La primera línea es lo que estás buscando.
Las versiones más recientes de Framework han agregado sobrecargas con aún más argumentos. Número máximo de argumentos:
- .NET Framework 2.0: 1
- .NET Framework 3.5: 4
- .NET Framework 4.0: 16
- Silverlight: 16
Las acciones siempre tienen un tipo de devolución de void
. Un tipo de devolución void
no necesita y no se puede especificar como parámetro de tipo genérico. Por el contrario, los delegados Func
definen tipos de retorno "reales" y siempre tienen al menos un parámetro de tipo genérico para el tipo de retorno:
Func<TResult> public delegate TResult Func<TResult>()
Func<T,TResult> public delegate TResult Func<T,TResult>(T arg)
Func<T1,T2,TResult> public delegate TResult Func<T1,T2,TResult>(T1 arg1, T2 arg2)
...
.NET Framework 4.0 ha agregado modificadores de out
y out
a los parámetros de tipo genérico para contravarianza y covarianza. Ver: covarianza y contravarianza en genéricos . Ejemplos:
public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2)
public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2)
Tu redacción es confusa Quizás quieras decir "una función sin un tipo de devolución y sin parámetros". Simplemente hay System.Action .
Action action = () => Console.WriteLine("hello world");
action();
De tu comentario:
Pero necesito completar un tipo
<T>
en una Acción y el vacío no es una posibilidad (editaré mi pregunta, cometí un error).
Esto indica un malentendido. La T en el delegado de Acción es una entrada . El vacío es la salida. Un delegado de Acción es inherentemente un delegado que devuelve el vacío. La T es el tipo de entrada sobre la que puede actuar, los parámetros que usted luego proporcionaría con argumentos.
En cualquier caso, como muestran esta respuesta y otras, puede tener un delegado de Acción sin ninguna T, un delegado que no toma entradas.