C# 9.0 -  Funções anônimas estáticas

Hoje vou apresentar o novo recurso do C# 9.0 : Funções anônimas estáticas.

O C# 9 trouxe uma importante melhoria para funções anônimas, permitindo o modificador estático nelas e agora temos funções anônimas estáticas!

Por que a Microsoft trouxe esse recurso?

Porque a alocação é importante!

A motivação é evitar capturar involuntariamente o estado do contexto delimitador, o que pode resultar em uma retenção inesperada de objetos capturados ou alocações adicionais inesperadas.

Assim, agora um método lambda ou anônimo pode ter um modificador static que indica que o método lambda ou anônimo é uma função anônima estática.

Assim uma função anônima estática :

Como exemplo abaixo temos um trecho de código onde a variável contextual _texto(variável de instância) é capturada pela função anônima e pode causar alocação não intencional:

private string _texto = "{0} é um belo país!";
public void PromoverPais(Func<string, string> func)
{
            var paises = new List<string> { "Canada", "França", "Japão" };
            foreach (var pais in paises)
                Console.WriteLine(func(pais));
}
PromoverPais(pais => string.Format(this._texto, pais));

Para corrigir isso, você pode adicionar o modificador static na função lambda e usar o modificador const na variável que você não deseja que seja capturada, dessa forma, qualquer contexto delimitador será capturado lá:

const string _texto = "{0} é um belo país!";
public void PromoverPais(Func<string, string> func)
{
            var paises = new List<string> { "Canada", "França", "Japão" };
            foreach (var pais in paises)
                Console.WriteLine(func(pais));
}
PromoverPais(static pais => string.Format(_texto, pais));

Concluindo temos que :

As regras de acessibilidade para membros privados no escopo delimitador são as mesmas para funções anônimas estáticas e não estáticas.

E estamos conversados...

Não se turbe o vosso coração; credes em Deus, crede também em mim.
Na casa de meu Pai há muitas moradas. Se assim não fora, eu vo-lo teria dito. Pois vou preparar-vos lugar.

João 14:1,2

Referências:


José Carlos Macoratti