Встроенные типы делегатов в C#

C# предоставляет несколько встроенных типов делегатов, которые упрощают работу с методами. Эти делегаты широко используются в LINQ, событиях и обработчиках данных.

Action

Action — это делегат, который представляет метод без возвращаемого значения. Он может принимать от 0 до 16 параметров.

using System;

class Program
{
    static void PrintMessage(string message)
    {
        Console.WriteLine(message);
    }
    
    static void Main()
    {
        Action<string> action = PrintMessage;
        action("Hello, world!");
    }
}

Func

Func — это делегат, который представляет метод с возвращаемым значением. Он может принимать до 16 параметров, а последний параметр всегда обозначает возвращаемый тип.

using System;

class Program
{
    static int Sum(int a, int b) => a + b;
    
    static void Main()
    {
        Func<int, int, int> func = Sum;
        Console.WriteLine(func(5, 3));
    }
}

Predicate

Predicate<T> — это делегат, который принимает один параметр типа T и возвращает bool. Используется для проверки условия.

using System;

class Program
{
    static bool IsPositive(int number) => number > 0;
    
    static void Main()
    {
        Predicate<int> predicate = IsPositive;
        Console.WriteLine(predicate(10)); // True
        Console.WriteLine(predicate(-5)); // False
    }
}

Comparison

Comparison<T> — это делегат, который сравнивает два объекта типа T и возвращает int (-1, 0 или 1), аналогично IComparer<T>.

using System;
using System.Collections.Generic;

class Program
{
    static int CompareNumbers(int x, int y) => x.CompareTo(y);
    
    static void Main()
    {
        Comparison<int> comparison = CompareNumbers;
        List<int> numbers = new List<int> { 5, 2, 8, 1 };
        numbers.Sort(comparison);
        numbers.ForEach(Console.WriteLine);
    }
}

Встроенные делегаты Action, Func, Predicate и Comparison помогают писать компактный и удобочитаемый код, упрощая работу с методами.