Private helper methods used by only one method pollute class scope. Local functions keep helpers truly local.
Without Local Function:
public class Calculator
{
public int Calculate(int[] numbers)
{
var valid = FilterValid(numbers);
return Sum(valid);
}
private int[] FilterValid(int[] numbers) => numbers.Where(n => n > 0).ToArray();
private int Sum(int[] numbers) => numbers.Sum();
// These helpers visible to entire class even though only Calculate uses them
}
With Local Functions:
public class Calculator
{
public int Calculate(int[] numbers)
{
// Local functions - only exist within Calculate method
int[] FilterValid(int[] nums) => nums.Where(n => n > 0).ToArray();
int Sum(int[] nums) => nums.Sum();
var valid = FilterValid(numbers);
return Sum(valid);
}
// No helper methods polluting class scope!
}
Can Capture Variables:
public string ProcessData(string input, bool uppercase)
{
string Transform(string text) // Captures 'uppercase' variable
{
return uppercase ? text.ToUpper() : text.ToLower();
}
return Transform(input.Trim());
}
