Все делегаты Func возвращают значение. Какие делегаты .NET могут использоваться с методами, возвращающими void?
Делегат Func без возвращаемого типа
Ответ 1
Все делегаты Func возвращают что-то; все делегаты Action возвращают void.
 Func<TResult> не принимает аргументов и возвращает TResult:
public delegate TResult Func<TResult>()
 Action<T> принимает один аргумент и не возвращает значение:
public delegate void Action<T>(T obj)
 Action - самый простой, "голой" делегат:
public delegate void Action()
Там также Func<TArg1, TResult> и Action<TArg1, TArg2> (и другие до четырех аргументов). Все они (кроме Action<T>) новы для .NET 3.5 (определенные в System.Core).
Ответ 2
... не принимает аргументов и имеет возвращаемый тип void?
Я считаю, что Action является решением этого.
Ответ 3
Все делегаты Func принимают по крайней мере один параметр
Это не так. Все они принимают хотя бы один аргумент типа, но этот аргумент определяет тип возврата.
Итак Func<T> не принимает никаких параметров и возвращает значение. Используйте Action или Action<T>, когда вы не хотите возвращать значение.
Ответ 4
Попробуйте System.Func<T> и System.Action
Ответ 5
Иногда вам нужно написать делегат для обработки событий, и в этом случае вы можете воспользоваться System.EvenHandler<T>, который неявно принимает аргумент типа object в дополнение ко второму параметру, который должен выводиться из EventArgs. EventHandlers вернут void
Я лично нашел это полезным во время тестирования для создания однократного обратного вызова в теле функции.
