C# - Usando variáveis Discards
  Hoje vamos recordar como usar variáveis Discards na linguagem C#.


A partir da versão 7.0, o C# introduziu um novo recurso chamado discard (descarte numa tradução livre) para criar variáveis fictícias, definidas pelo caractere sublinhado _ que se assemelham a variáveis atribuídas que não possuem um valor.
 


 

O objetivo desse recurso é usar essa variável quando você deseja ignorar intencionalmente o valor não criando uma variável explicitamente.

Por exemplo - quando você está chamando um método que retorna o objeto, mas o chamador está interessado apenas em chamar o método, e não no objeto retornado. Nesses casos, podemos usar uma variável de descarte para reduzir a alocação de memória e deixar seu código mais claro também.

 

Com isso podemos destacar dois grandes benefícios deste recurso:

As variáveis discards são marcadas com um sublinhado  "_"  como nome.

 

O exemplo abaixo contém o método PessoaDetalhes, que retorna informações nome, peso, idade e cor onde peso e cor são descartados:

 

  Demo d = new Demo();
  (
string nome, _, int idade, _) = d.PessoaDetalhes("Macoratti", 80, 54, "Branca");

class Demo
{
  public (string, int, int, string) PessoaDetalhes(string nome, int peso, int idade, string cor)
  {
   
string p_nome = nome;
   
int p_peso = peso;
   
int p_idade = idade;
   
string p_cor = cor;
   
return (p_nome, p_peso, p_idade, p_cor);
   }
}

 

Vejamos outro cenário de uso do discard.

 

Vamos supor um cenário onde verificamos se a string fornecida é um objeto DateTime válido ou não, usando o método TryParse.

 

DateTime resultado;

if (DateTime.TryParse("02/29/2022", out resultado))
{
   Console.WriteLine(
"Data é válida");
}

else

{
  Console.WriteLine(
"Data não é válida");
}


No entanto, o método TryParse espera que o parâmetro out produza o resultado DateTime além de retornar o resultado booleano, portanto, devemos declarar a variável de resultado DateTime para usá-la no parâmetro out mesmo que não a usemos.

 

Esta seria uma situação ideal para usar a variável discard se não formos usar o objeto resultado.

 

if (DateTime.TryParse("02/29/2022", out _))
{
   Console.WriteLine(
"Data é válida");
}

else

{
  Console.WriteLine(
"Data não é válida");
}

 

Usando a variável de descarte, podemos ignorar completamente a variável de resultado. Se quisermos ignorar o resultado retornado e estivermos interessados apenas no objeto de resultado real, podemos fazer o exemplo usando o código abaixo:

 

var resultado;
_ = DateTime.TryParse(
"02/29/2019", out resultado);
 

 

Outro uso deste recursos seria quando usamos o método Task.Run, na programação assíncrona, para chamar métodos; se você não estiver interessado no resuultado do retorno, podemos usar a variável discard :
 


_ = Tasl.Run(()=> {...});
 

 

Mas fique atento !!!

 

Se o descarte for usado como parâmetro e ao mesmo tempo, você tiver outra variável de descarte no escopo da função. Então o descarte do escopo “_” agirá como uma variável normal.

 

static void ExibirValor(string _)
{
  _ =
"Método Exibir com discard";

  Console.WriteLine(_);
}

 

E estamos conversados...
 

"E sereis odiados por todos por amor do meu nome; mas quem perseverar até ao fim, esse será salvo."
Marcos 13:13

 

Porque um menino nos nasceu, um filho se nos deu, e o principado está sobre os seus ombros, e se chamará o seu nome: Maravilhoso, Conselheiro, Deus Forte, Pai da Eternidade, Príncipe da Paz.

Isaías 9:6
Porque um menino nos nasceu, um filho se nos deu, e o principado está sobre os seus ombros, e se chamará o seu nome: Maravilhoso, Conselheiro, Deus Forte, Pai da Eternidade, Príncipe da Paz.

Isaías 9:6

Referências:


José Carlos Macoratti