В чем разница между Action и Func в C#?

«В чем разница между Action и Func в C#?» — вопрос из категории C# Core, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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, когда вам нужно передать метод для вычисления значения.