Что такое делегат Func в C#?

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

Ответ

Func — это предопределённый обобщённый делегат в пространстве имён System, который инкапсулирует метод, возвращающий значение. Он может принимать от 0 до 16 входных параметров, причём последний параметр типа всегда задаёт возвращаемый тип (TResult).

Основное назначение:

  • Передача методов как параметров (callback-и).
  • Использование в LINQ-запросах и методах высшего порядка.
  • Упрощение кода, работающего с лямбда-выражениями и анонимными методами.

Примеры использования:

// Func без параметров, возвращающий строку
Func<string> getGreeting = () => "Hello, World!";

// Func с двумя параметрами (int, int) и возвращаемым типом int
Func<int, int, int> multiply = (x, y) => x * y;
int result = multiply(5, 4); // result = 20

// Использование в LINQ (Where принимает Func<T, bool>)
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0); // n => n % 2 == 0 — это Func<int, bool>

Ключевое отличие от Action: Action представляет метод, который не возвращает значение (void), в то время как Func всегда возвращает результат указанного типа.