Ce face Funcții locale
Funcțiile locale țin codul de ajutor lângă singura metodă care îl folosește, fără să aglomereze clasa. Pot fi apelate înainte de locul unde sunt declarate, pot fi recursive, generice sau async.
O funcție locală vede variabilele locale și parametrii metodei care o conține. Cu modificatorul static (C# 8) compilatorul interzice asta, ca să fii sigur că funcția depinde doar de parametrii ei.
Exemple
Exemplul 1: Validare cu funcție locală
Console.WriteLine(Medie([9, 10, 8]));
Console.WriteLine(Medie([9, 11]));
static string Medie(int[] note)
{
if (!ToateValide())
return "note invalide";
return $"media: {note.Sum() / note.Length}";
bool ToateValide()
{
foreach (int n in note)
if (n < 1 || n > 10) return false;
return true;
}
}
Rezultat
media: 9
note invalide
Exemplul 2: Funcție locală statică și recursivă
static garantează că Factorial nu folosește variabile din jur.
for (int i = 1; i <= 5; i++)
Console.Write($"{Factorial(i)} ");
Console.WriteLine();
static long Factorial(int n) => n <= 1 ? 1 : n * Factorial(n - 1);
Rezultat
1 2 6 24 120
Greșeli frecvente
- O funcție locală
staticcare folosește o variabilă a metodei dă eroarea CS8421. - Funcțiile locale nu pot avea modificatori de acces (
public,private): sunt mereu vizibile doar în metoda lor.
Comenzi înrudite
Metode (static, void, return): O metodă grupează cod reutilizabil sub un nume: primește parametri, poate returna o valoare cu return sau nimic (void).Expresii lambda (=>): O funcție scurtă, fără nume, scrisă pe loc: parametri => rezultat. Se folosește în LINQ, la evenimente și oriunde se cere un delegat.Func, Action și Predicate: Tipurile de delegat gata făcute din .NET: Func returnează o valoare, Action nu returnează nimic, Predicate returnează bool.