Ответ
Action и Func — это предопределенные обобщенные делегаты в .NET, которые устраняют необходимость вручную объявлять типы делегатов для стандартных сигнатур.
Action представляет метод, который не возвращает значение (void).
Func представляет метод, который возвращает значение.
Ключевые отличия:
| Критерий | Action |
Func |
|---|---|---|
| Возвращаемое значение | Всегда void. |
Всегда имеет возвращаемый тип (последний параметр типа). |
| Параметры типа | Определяют только типы входных параметров (0-16 штук). | Последний параметр типа — тип возвращаемого значения, остальные — типы входных параметров (0-16 штук). |
| Пример сигнатуры | Action<T1, T2> соответствует void Method(T1 arg1, T2 arg2). |
Func<T1, T2, TResult> соответствует TResult Method(T1 arg1, T2 arg2). |
Примеры использования:
// Action - для операций без возврата результата (например, логирование)
Action<string> logMessage = (message) => Console.WriteLine($"Log: {message}");
logMessage("Application started");
// Func - для операций с возвратом результата (например, преобразование)
Func<int, int, int> add = (a, b) => a + b;
int sum = add(5, 3); // sum = 8
// Func без входных параметров
Func<DateTime> getCurrentTime = () => DateTime.Now;
Когда что использовать:
- Используйте
Action, когда вам нужно передать метод для выполнения побочного эффекта. - Используйте
Func, когда вам нужно передать метод для вычисления значения.