void Func без аргументов

Есть несколько подобных вопросов, но не так, как у меня.

Существует ли эквивалент Func для функции без возвращаемого значения (т.е. Void) и без параметров?

Связанный с этим вопрос - Func ничего не возвращает? но это не отвечает за тип пустоты.

(Мне нужно, чтобы он запрашивал действия с моей модели просмотра на мой взгляд).

Ответ 1

Ваша формулировка сбивает с толку. Возможно, вы имеете в виду "функцию без возвращаемого типа и без параметров". Существует просто System.Action.

Action action = () => Console.WriteLine("hello world");
action();

Из вашего комментария:

Но мне нужно заполнить тип <T> в Action, и void не является возможностью (я отредактирую свой вопрос, я допустил ошибку).

Это указывает на недоразумение. T в делетете действия - это вход. Пустота - это выход. Делегат действия по сути является делегатом, возвращающим пустоту. T - тип ввода, на который он может воздействовать, параметры, которые вы должны были бы снабжать аргументами.

Во всяком случае, как показывает этот ответ и другие, у вас может быть делегат Action без T, делегат, который не принимает никаких данных.

Ответ 2

Да, существуют разные перегрузки Action с различным количеством входных параметров и с типом возврата 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)
...

Первая строка - это то, что вы ищете.

В версиях Newer Framework добавлены перегрузки с еще большим количеством аргументов. Максимальное количество аргументов:

  • .NET Framework 2.0: 1
  • .NET Framework 3.5: 4
  • .NET Framework 4.0: 16
  • Silverlight: 16

Действия всегда имеют тип возврата void. Тип возврата void не нужен и не может быть указан как параметр типового типа. Напротив, делегаты Func определяют "реальные" типы возвращаемых данных и всегда имеют по крайней мере один общий тип типа для возвращаемого типа:

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)
...

Framework 4.0 добавил in и out модификаторов параметров универсального типа для контрвариации и ковариации. См.: Ковариация и контравариантность в дженериках. Примеры:

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)

Ответ 3

То, что вы ищете, - это действие. Он не принимает никаких параметров и не возвращает значения.