Com o C# 7.0, agora também é possível a declaração de funções dentro de métodos convencionais. Do ponto de vista prático, este recurso batizado como Local Functions permitirá que se isolem métodos que teriam a princípio uma abrangência de uso bem restrita (normalmente invocados por uma única operação).
Na próxima listagem está um exemplo envolvendo a utilização de uma Local Function chamada ExibirHorarioAtual:
using System;
using System.Threading;
namespace ExemploLocalFunctions01
{
class Program
{
static void Main(string[] args)
{
void ExibirHorarioAtual()
{
Console.WriteLine(
quot;Horário atual: {DateTime.Now.ToString("HH:mm:ss")}");
}
ExibirHorarioAtual();
Console.WriteLine("Aguarde alguns segundos...");
Random r = new Random();
Thread.Sleep(new Random().Next(3000, 6000));
ExibirHorarioAtual();
Console.ReadKey();
}
}
}
A imagem a seguir traz o resultado da execução desta sequência de instruções:

A listagem seguinte apresenta um segundo exemplo de uso de uma Local Function, com o método Inverter revertendo a ordem dos caracteres que compõem uma string:
using System;
using System.Linq;
namespace ExemploLocalFunctions02
{
class Program
{
static void Main(string[] args)
{
string Inverter(string valor)
{
return new string(
valor.ToCharArray().Reverse().ToArray());
}
string texto;
texto = "Utilizando o C# 7.0";
Console.WriteLine(quot;{texto} -> {Inverter(texto)}");
texto = "Local Function";
Console.WriteLine(quot;{texto} -> {Inverter(texto)}");
Console.ReadKey();
}
}
}
O resultado da execução deste bloco de código está na próxima imagem:

A função Inverter também poderia ser declarada empregando uma expressão lambda, representando assim um exemplo de Expression-bodied Function. É o que demonstra a listagem a seguir:
using System;
using System.Linq;
namespace ExemploLocalFunctions02
{
class Program
{
static void Main(string[] args)
{
string Inverter(string valor) =>
new string(valor.ToCharArray().Reverse().ToArray());
string texto;
texto = "Utilizando o C# 7.0";
Console.WriteLine(quot;{texto} -> {Inverter(texto)}");
texto = "Local Function";
Console.WriteLine(quot;{texto} -> {Inverter(texto)}");
Console.ReadKey();
}
}
}
Referências
- New Features in C# 7.0: https://blogs.msdn.microsoft.com/dotnet/2017/03/09/new-features-in-c-7-0/




