Variáveis locais podem ser declaradas com o “tipo” var ao invés de um tipo explícito. São as variáveis do tipo implícito. A palavra chave var instrui o compilador para inferir o tipo da variável resultante da expressão do lado direito da instrução de inicialização. O tipo da variável inferida pode ser um tipo primitivo, um tipo anônimo, um tipo definido pelo usuário ou um tipo definido pela biblioteca de classes do .NET Framework.
Variáveis do tipo implícito
Os exemplos seguintes mostram várias maneiras de se declarar variáveis do tipo implícito com a palavra chave var:
// i será compilada como um inteiro var i = 5; // s será compilada como uma string var s = "Hello"; // a será compilada como um int[] var a = new[] { 0, 1, 2 }; // expr será compilada como IEnumerable<Customer> // ou talvez IQueryable<Customer> var expr = from c in clientes where c.Cidade == "Campinas" select c; // anon será compilada como tipo anônimo var anon = new { Nome = "João", Idade = 50 }; // lista será compilada como List<int> var lista = new List<int>();
É importante entender que a palavra chave var não significa “variante”, tampouco indica que a variável é “tipada“ tardiamente. Apenas significa que o compilador determina e atribui o tipo mais apropriado.
A palavra chave var pode ser utilizada nos seguintes contextos:
- Em variáveis locais (variáveis declaradas no escopo do método) como visto no exemplo anterior;
- Na inicialização de uma estrutura for.
for(var x = 1; x < 10; x++)
- Na inicialização de uma estrutura foreach;
foreach(var item in lista){...}
- Na instrução using;
using (var arquivo = new StreamReader("C:\\meuarquivo.txt")) {...}
var e tipos anônimos
Em muitos casos o uso de var é opcional e apenas uma conveniência de sintaxe. Entretanto, quando uma variável é inicializada com um tipo anônimo você deve declarar a variável com var se precisar acessar as propriedades do objeto depois. Este é um cenário comum em expressões de pesquisas LINQ.
Da perspectiva do código fonte, um tipo anônimo não tem nome. Entretanto, se uma variável de pesquisa foi inicializada com var, a única maneira de acessar propriedades numa sequência de objetos retornada é usar o tipo var na variável de iteração da instrução foreach.
class TiposImpicitosLocais { static void Main() { string[] palavras = { "nUVEm", "EsCaDa", "ParaLELEpiPEdO" }; // Se uma pesquisa resulta numa sequência de tipos anônimos, // utilize var na estrutura foreach para poder acessar as propriedades. var palavrasMinusculasMaiusculas = from p in palavras select new { Maiuscula = w.ToUpper(), Minuscula = w.ToLower() }; // Executando a pesquisa foreach (var pmm in palavrasMinusculasMaiusculas) { Console.WriteLine("Maiúsculas: {0}, Minúsculas: {1}", pmm.Maiuscula, pmm.Minuscula); } } } /* Saída: Maiúsculas: NUVEM, Minúsculas: nuvem Maiúsculas: ESCADA, Minúsculas: escada Maiúsculas: PARALELEPIPEDO, Minúsculas: paralelepipedo */
Observações
Declarações de variáveis do tipo implícito possuem algumas restrições, que veremos a seguir.
Var pode apenas ser utilizada quando uma variável local é declarada e inicializada na mesma instrução; a variável não pode ser inicializada com nulo ou para um grupo de métodos ou uma função anônima.
Var não pode ser utilizada em campos no escopo da classe.
Variáveis declaradas com var não podem ser utilizadas na inicialização de uma expressão. Em outras palavras, a expressão abaixo é válida:
int i = (i = 20);
mas esta provoca um erro em tempo de compilação:
var i = (i = 20);
Múltiplas variáveis implicitamente “tipadas” não podem ser inicializadas na mesma instrução.
Var também é útil em expressões de pesquisa onde seja difícil de determinar o tipo exato da variável. Isto pode ocorrer com operações de agrupamento e ordenação.
Podemos usar var quando especificar o tipo da variável for trabalhoso ou óbvio demais, ou ainda quando não ajuda a melhorar a leitura do código. Um exemplo onde var ajuda desta maneira são nos tipos aninhados de tipos genéricos como a utilizada em operações de grupo. Veja abaixo uma pesquisa onde o tipo é
IEnumerable<IGrouping<string, Estudante>>
Enquanto você e outros que farão a manutenção do código entenderem isso, não há problema em usar tipos implícitos por conveniência e para ser breve.
// Como no exemplo anterior, exceto pelo fato de usarmos o ultimo nome como chave. // Pesquisa é um IEnumerable<IGrouping<string, Estudante>> var pesquisaEstudante3 = from estudante in estudantes group estudante by estudante.Last;
Palavras finais
Declarar variáveis do tipo implícito com a palavra chave var indica ao compilador que ele deve inferir que o tipo a ser utilizado na variável será o resultado da expressão do lado direito do sinal de atribuição = (igual).
Var não quer dizer variante. Devemos sempre inicializar uma variável deste tipo.
Entretanto o uso de var tem potencial de deixar seu código mais difícil de ler por outros desenvolvedores. Por esta razão, a documentação C# normalmente utiliza var somente quando necessário.
Meu e-book Como Aprender a Programar do Absoluto Zero está GRATUITO por tempo limitado!
Olha o link: 👉🏼 http://celsokitamura.com.br/como-aprender-a-programar
Bora aprender a programar!