Все делегаты 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
Я лично нашел это полезным во время тестирования для создания однократного обратного вызова в теле функции.