Я не понимаю, зачем вам это нужно?
Потому что это мешает вам выстрелить себе в ногу. Это заставляет локальную функцию быть чистой функцией , которая не изменяет состояние вызывающего.
Возвращает false
, потому что функция изменяет локальные переменные своего вызывающего:
public bool Is42()
{
int i = 42;
Foo();
return i == 42;
void Foo()
{
i = 21;
}
}
И это не так, потому что он даже не компилируется:
public bool Is42()
{
int i = 42;
Foo();
return i == 42;
static void Foo()
{
i = 21;
}
}
Он предотвращает неожиданности. Конечно, в этих простых примерах выгода не сразу очевидна, потому что "хорошо, очевидно, что Foo()
изменяет i
" , но в больших кодовых базах, поддерживаемых несколькими людьми и не должным образом покрытых модульными тестамиЭтот простой модификатор предотвращает горе.