Ответ
Action — это предопределенный обобщенный делегат в пространстве имен System, который представляет метод, не возвращающий значение (void). Он может принимать от 0 до 16 входных параметров.
Основное назначение: передача методов как объектов (коллбэки) для последующего выполнения, часто в сценариях обратных вызовов, событий или LINQ.
Примеры использования:
// Action без параметров
Action greet = () => Console.WriteLine("Hello, World!");
greet();
// Action с одним параметром
Action<string> logError = (message) => Console.WriteLine($"[ERROR] {message}");
logError("File not found");
// Action с несколькими параметрами
Action<string, int> printDetails = (name, age) =>
{
Console.WriteLine($"Name: {name}");
Console.WriteLine($"Age: {age}");
};
printDetails("Alice", 30);
// Использование в LINQ для обработки коллекции
List<int> numbers = new List<int> { 1, 2, 3 };
numbers.ForEach(n => Console.WriteLine(n * n)); // ForEach принимает Action<int>
Практическое применение:
- Коллбэки в асинхронных операциях (например, продолжения в
Task). - Обработчики событий и реализации паттернов типа Publisher/Subscriber.
- Параметризация поведения методов (стратегия, команда).
Ключевое отличие от Func<T>: Func<T> всегда возвращает значение типа T, в то время как Action всегда возвращает void.