Делегат Func без возвращаемого типа

Все делегаты Func возвращают значение. Какие делегаты .NET могут использоваться с методами, возвращающими void?

Ответ 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

Я лично нашел это полезным во время тестирования для создания однократного обратного вызова в теле функции.