День семьдесят шестой. #CSharp8

Новые функции в C# 8.

7. Статические локальные функции

Вы теперь можете добавлять модификатор static к локальным функциям, чтобы убедиться, что локальная функция не включает (не ссылается) на переменные из обрамляющего её блока кода. Если это произойдёт, будет выброшено исключение CS8421 "A static local function can't contain a reference to <variable>." ("Статическая локальная функция не может ссылаться на <имя переменной>.").

Рассмотрим следующий код. Локальная функция LocalFunction ссылается на переменную y, объявленную в обрамляющем её коде (методе M). Поэтому LocalFunction не может быть объявлена статической:

int M()

{

int y;

LocalFunction();

return y;

void LocalFunction() => y = 0;

}

Следующий код содержит статическую локальную функцию. Она может быть объявлена статической, поскольку она не содержит никаких ссылок на переменные из обрамляющего её кода:

int M()

{

int y = 5;

int x = 7;

return Add(x, y);

static int Add(int left, int right) => left + right;

}



Источник: https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8