TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.74K subscribers
Post #2708 2.78K
День 2243. #ЗаметкиНаПолях
Статические Лямбда-Функции не Являются Статическими Методами
Начиная с C# 9.0, вы можете использовать модификатор static в лямбда-функциях. Например, вы можете написать следующий код:
enumerable.Select(static x => x * 2);

Когда вы используете модификатор static в лямбда-функции, компилятор гарантирует, что не будет захвата переменных из охватывающей области видимости. Это позволяет компилятору генерировать лучший код. Он может кэшировать лямбда-функцию и повторно использовать её в нескольких вызовах. Это может повысить производительность в некоторых сценариях. Однако код, сгенерированный компилятором, одинаков, независимо от того, используете ли вы модификатор static или нет.

Если вы посмотрите на сгенерированный код, вы увидите, что лямбда-функция не является статическим методом. Это метод экземпляра.
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Func<int, int> <>9__0_0;

// This method is not static
internal int <<Main>$>b__0_0(int i)
{
return i + 1;
}
}


Почему компилятор генерирует метод экземпляра вместо статического метода? Причина кроется в том, как работают делегаты. Делегаты используют соглашение о вызове экземпляра, то есть они ожидают вызова методов экземпляра. Когда лямбда-функция преобразуется в делегат, компилятор генерирует метод экземпляра, соответствующий этому соглашению. Если бы лямбда была статическим методом, компилятору пришлось бы использовать костыли для перестановки аргументов, что может негативно повлиять на производительность.

Источник: https://www.meziantou.net/static-lambda-functions-are-not-static-methods.htm
  • 👍 25
More from @netdeveloperdiary
  1. Sep 26, 2026День 2796. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Продолжение Начало Три…
  2. Sep 25, 2026День 2795. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Начало Проблема с позиц…
  3. Sep 24, 2026День 2794. #Оффтоп #Здоровье Сегодня будет необычный пост. Завтра в Москве стартует конфер…
  4. Sep 23, 2026День 2793. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
  5. Sep 22, 2026День 2792. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
  6. Sep 21, 2026🔍Тестовое собеседование с Senior C# разработчиком уже завтра 22 сентября(уже завтра!) в 1…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →