RU CSharp Delegates Lambdas - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Делегат хранит вызываемую функцию определённой сигнатуры. Action не возвращает результат, Func возвращает его, Predicate<T> возвращает bool. Лямбда записывается как arguments => expression или блок. Захваченная переменная принадлежит замыканию, поэтому изменение её значения влияет на последующие вызовы.
Сохраните этот пример отдельно как Example.cs. Запускайте его независимо от остальных примеров страницы.
Example.cs:
// PROJECT-EXAMPLE
System.Func<int, int> twice = value => value * 2;
System.Console.WriteLine(twice(4));Результат:
8
Func<int, int, int> add = (left, right) => left + right;
Action<string> report = text => UO.Print(text);
report($"Total={add(2, 3)}");int count = 0;
Action next = () => count++;
next();
next();
UO.Print($"Count={count}");Метод можно передать как method group, когда его сигнатура соответствует делегату. static-лямбда не захватывает локальный контекст. Для возвращающей задачу лямбды используйте Func<Task> или Func<T,Task> и ожидайте задачу; async void оставляют обработчикам событий, требующим void.
Официальная документация: Делегаты, лямбды и замыкания — Microsoft Learn.